求根公式的推导

这里直接引用网络上的一般公式 ,如下图。

在C语言中的实现

#include<stdio.h>
#include<math.h>
#include<complex.h>int main() {double _Complex x1,x2,x3,p,q,i,w,s1,s2,s3,X2,X3;//命名为复数double型float a=0.0633,b=0.0616,c=-11.618;//已知参数a、b、c求d
//从data1.txt读数据float d[63]={0};  //数据数目与初始化FILE *fpRead=fopen("data1.txt","r");  if(fpRead==NULL)  {  return 0;  }  for(int i=0;i<64;i++)  {  fscanf(fpRead,"%e ",&d[i]);  printf("%f\n",d[i]); p=(3*a*c-b*b)/(3*a*a);q=(27*a*a*d[i]-9*a*b*c+2*b*b*b)/(27*a*a*a);w=-0.5+(sqrt(3)/2)*I;s1=-b/(3*a);s2=cpow((-q/2+csqrt(q*q/4+p*p*p/27)),1.0/3);s3=cpow((-q/2-csqrt(q*q/4+p*p*p/27)),1.0/3);x1=s1+s2+s3;x2=s1+w*s2+w*w*s3;x3=s1+w*w*s2+w*s3;printf("第一个解的实部为%f, 虚部为%f, 模为%f\n", creal(x1), cimag(x1), cabs(x1));printf("第二个解的实部为%f, 虚部为%f, 模为%f\n", creal(x2), cimag(x2), cabs(x2));printf("第三个解的实部为%f, 虚部为%f, 模为%f\n", creal(x3), cimag(x3), cabs(x3));}
}

关于一元三次方程组算法设计的注解:一元三次方程组可能会出现复数根的情况,同时对于本文所选求根公式,里面包含有许多开根号的情况,在算法设计中需要特别注意开根号下面不能为负数,若为负数需要使用复数计算。

关于C语言编写的注解:头文件中使用了math.h为数学公式库,complex.h为复数运算库。内容部分使用输入输出流导入data1.txt数据,在主程序进行计算,最后输出时使用复数的求实部、虚部、模的方法输出。本文程序使用gcc编译计算,其中-lm是为了解决gcc编译过程中无法使用math函数的问题,具体过程如下:

geant4@geant4:~/caculation/TEST$ gcc caculation.cpp -lm
geant4@geant4:~/caculation/TEST$ ./a.out >b.out
geant4@geant4:~/caculation/TEST$

可以将输出内容直接导入b.out文件,b.out文件内容如下:

34.893002
第一个解的实部为11.092843, 虚部为0.000000, 模为11.092843
第二个解的实部为-15.311442, 虚部为-0.000000, 模为15.311442
第三个解的实部为3.245455, 虚部为0.000000, 模为3.245455
37.488998
第一个解的实部为10.888025, 虚部为0.000000, 模为10.888025
第二个解的实部为-15.394507, 虚部为-0.000000, 模为15.394507
第三个解的实部为3.533338, 虚部为0.000000, 模为3.533338
38.027000
第一个解的实部为10.843715, 虚部为0.000000, 模为10.843715
第二个解的实部为-15.411565, 虚部为-0.000000, 模为15.411565
第三个解的实部为3.594707, 虚部为0.000000, 模为3.594707
38.511002
第一个解的实部为10.803252, 虚部为0.000000, 模为10.803252
第二个解的实部为-15.426867, 虚部为-0.000000, 模为15.426867
第三个解的实部为3.650470, 虚部为0.000000, 模为3.650470
37.249001
第一个解的实部为10.907572, 虚部为0.000000, 模为10.907572
第二个解的实部为-15.386880, 虚部为-0.000000, 模为15.386880
第三个解的实部为3.506164, 虚部为0.000000, 模为3.506164省略~~~

参考文献:

[1]c语言公式法求解一元三次方程

[2]C语言实现复数运算

基于C语言使用卡尔丹公式法求解一元三次方程相关推荐

  1. c语言公式法求解一元三次方程

    #include<stdio.h> #include<math.h> int main() {float a,b,c,d,x1,x2,x3,p,q,i,w,s1,s2,s3,X ...

  2. 用c语言求解ax2 bx c=0方程的根,用公式法求解一元二次方程ax

    用公式法求解一元二次方程ax2+bx+c=0,并要求输出它的实根. 答案 思路分析:本题考查条件语句设计程序的应用.输入三个实数a,b,c,通过判断判别式Δ是否为零来求实根. 解:程序框图如图1-2- ...

  3. 弦截法c语言程序,用弦截法求解一元三次方程的根(利用c语言实现)

    用弦截法求解一元三次方程的根(利用c语言实现)0 特别v2013.09.24浏览296次分享举报 #include #include float f(x) { float a,b,c,d; float ...

  4. 求三次样条函数c语言,基于C语言对三次样条函数的求解及程序.PDF

    基于C语言对三次样条函数的求解及程序 Va1ueEngineering 95 . 基于C语言对三次样条函数的求解及程序 TheSolutionandtheProgram toCubicSplineFu ...

  5. C# 盛金公式 求解一元三次方程

    class dd2{private static readonly double dsr3 = Math.Sqrt(3);// <summary>/// 盛金公式求解一元三次方程,ax^3 ...

  6. 求解一元三次方程(c语言)

    求解一元三次方程 描述 格式 样例 题解及注释 描述 格式 样例 题解及注释 是数学的最小二分法 #include <stdio.h> #include <math.h> #i ...

  7. c语言求解一元三次方程(二分法和公式法)

    一.二分法 1.二分法概念:二分法,又称分半法,是一种方程式根的近似值求法.对于区间[m,n]上连续不断且f(m)*f(n)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为 ...

  8. 用盛金公式求解一元三次方程

    解一元三次方程一般用盛金公式求解,算法高效且求出来的解精确.     百度百科关于盛金公式有如下解释: 盛金公式 Shengjin's Formulas 一元三次方程aX^3+bX^2+cX+d=0, ...

  9. 求解一元三次方程的一个实数解

    求解已知一元三次方程的一个实数解 上机内容:C++ 上机目的: 编程序求解方程2x3-5*x2+3x-6=0的1个实数根,要求精确到0.00001 已知f(x)=2x3-5*x2+3x-6 在> ...

最新文章

  1. 基于SIFT特征的全景图像拼接
  2. Python:高阶函数
  3. 第17课:循环神经网络(RNN)
  4. 课时5:闲聊之Python的数据类型
  5. php破坏代码,php不破坏单词截取子字符串
  6. ThreadPoolExecutor线程池 + Queue队列
  7. iOS- 快速实现展示布局
  8. python代码-你见过哪些令你瞠目结舌的 Python 代码技巧?
  9. 关于兰伯特投影得应用问题
  10. 抓包工具charles青花瓷的基本使用(android)
  11. STM32中AD采样的三种方法分析
  12. Spring Cloud如何可用于微服务架构
  13. Excel序号类操作实例
  14. 虚拟机网络与物理机网络互通
  15. 吴恩达机器学习(一)—— 简介
  16. 程序员的算法趣题:Q09 落单的男女(Java版)
  17. 网页被劫持跳转怎么办?发布网修复方法
  18. Oracle常用基本查询语句
  19. linux 图形界面无法弹出,xmanager无法弹出图形化界面。
  20. Sql 日期操作 获取年月日等

热门文章

  1. 计算机学校位置阜阳,计算机学校附近学校
  2. kali httrack-网站克隆工具
  3. Graph Neural Networks—GCN、GraphSAGE、GAT
  4. Layout(布局)
  5. github+hexo搭建自己的博客网站(六)进阶配置(搜索引擎收录,优化你的url,添加RSS)...
  6. 进制转换和位操作(详细,通俗,易懂)
  7. 空间一致性是什么意思
  8. 不错的培训机构和课程
  9. 阿拉伯数字转中文读法
  10. java中两个数相除,求百分比(值四舍五入)