C语言解一元高次方程代码,拜求大佬,这代码里面是什么意思,这是一个求一元高次方程的代码...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
拜求大佬,这代码里面是什么意思,这是一个求一元高次方程的代码,用的什么方法,每个函数的作用是什么,可否帮忙解答一下!感谢
#include
#include
#include
using namespace std;
double x,error=1e-8;
int sign(double number) {
if (abs(number)
if (number>0) return 1;
else return -1;
}
void QD(int n, double a1[], double b1[][120])
{
int i, t = 0;
for (i = n - 2; i>=0; i--)
{
if (i == n - 2)
{
for (t = 0; t <= n; t++)
b1[i][t] = a1[t];
}
else {
for (t = 0; t <=i + 2; t++)
b1[i][t] = b1[i + 1][t] * (i - t + 3);
}
}
}
void QE(double h, double j, double k,int n,double r[][120])
{
double x1, x2,t;
t = j*j - 4 * h*k;
if (t == 0)
{
x1 = -j / (2 * h);
r[0][0] = 1;
r[0][1] = x1;
}
else if (t > 0)
{
x1 = (-j - sqrt(t)) / (2 * h);
x2 = (-j + sqrt(t)) /( 2 * h);
r[0][0] = 2;
r[0][1] = x1;
r[0][2] = x2;
}
else if (t <0)
{
r[0][0] = 0;
}
}
double ABX(double a, double b, double c[], int n)
{
double y1, y2, y3;
int i;
for (i = 0, y1 = y2 = 0; i
{
y1 = y1 + c[i] * pow(a, i);
y2 = y2 + c[i] * pow(b, i);
}
switch (sign(y1)*sign(y2))
{
case 0: return (abs(y1) < error) ? y1 : y2;
case 1: return 0;
case -1:
{ while (abs(y1)>error) {
double x = (a + b) / 2;
for (i = 0, y3 = 0; i < n + 1; i++)
{
y3 = y3 + c[i] * pow(x, i);
}
if (sign(y3) == 0) return x;
if (sign(y3)*sign(y1) == -1) {
b = x;
y2 = y3;
}
else {
a= x;
y1 = y3;
}
}
}
}
}
double QJ1(double min,double c[],int n)
{
double y1, y2,y=0, t = 0;
int i,j=1;
for (i = 0, y1=0; i
{
y1 = y1 + c[i] * pow(min, i);
}
t = min - j;
for (i = 0, y2 = 0; i
{
y2 = y2 + c[i] * pow(t, i);
}
if (abs(y2) < error)
{
return t;
}
if (y1<0 && y1 < y2)
{
while(y2<0)
{
j = 2 * j;
t = min - j;
for (i = 0, y1 = y2 = 0; i
{
y2 = y2 + c[i] * pow(t, i);
}
}
ABX(t,min,c,n);
return ABX(t, min, c, n);
}
else if (y1>0 && y1 > y2)
{
while (y2>0)
{
j = 2 * j;
t = min - j;
for (i = 0, y1 = y2 = 0; i
{
y2 = y2 + c[i] * pow(t, i);
}
}
ABX(t, min, c, n);
return ABX(t, min, c, n);
}
else return 0;
}
double QJ2(double max, double c[], int n)
{
double y1, y2, y=0, t = 0;
int i, j = 1;
for (i = 0, y1 = 0; i
{
y1 = y1 + c[i] * pow(max, i);
}
t = max +j;
for (i = 0, y2 = 0; i
{
y2 = y2 + c[i] * pow(t, i);
}
if (abs(y2) < 0.00000001)
{
return t;
}
if (y1<0 && y1 < y2)
{
while (y2<0)
{
j = 2 * j;
t = max + j;
for (i = 0, y1 = y2 = 0; i
{
y2 = y2 + c[i] * pow(t, i);
}
}
ABX(t,max, c, n);
return ABX(t, max, c, n);
}
else if (y1>0 && y1 > y2)
{
while (y2>0)
{
j = 2 * j;
t = max + j;
for (i = 0, y1 = y2 = 0; i
{
y2 = y2 + c[i] * pow(t, i);
}
}
ABX(t, max, c, n);
return ABX(t, max, c, n);
}
else return 0;
}
void CJ(double r[][120], int n, double h, double j, double k, double a1[120], double b1[][120])
{
double c[120];
double q;
int i, t = 1, z, p=0,j1=0;
QE(h, j, k, n, r);
if (r[0][0] != 0)
{
for (i = 1; i <= n - 2; i++)
{
j1 = r[i - 1][0] - 1;
p = r[i - 1][0];
if (p != 0)
{
p = 0;
for (z = 0; z <= i + 2; z++)
{
c[z] = *(*(b1 + (i)) + i + 2 - z);
}
q = QJ1(r[i - 1][1], c, i + 2);
if (q != 0)
{
p++;
r[i][p] = q;
}
else { p = p + 0; }
for (t = 1; t <= j1; t++)
{
ABX(*(*(r + i - 1) + t), *(*(r + i - 1) + t + 1), c, i + 2);
q = ABX(*(*(r + i - 1) + t), *(*(r + i - 1) + t + 1), c, i + 2);
if (q != 0)
{
p++;
r[i][p] = q;
}
else { p = p + 0; }
}
QJ2(*(*(r + (i - 1)) + t), c, i + 2);
q = QJ2(*(*(r + i - 1) + t), c, i + 2);
if (q != 0)
{
p++;
r[i][p] = q;
}
else { p = p + 0; }
r[i][0] = p;
}
else { cout << "此方程无解" << endl; }
}
}
else {
r[n-2][0] = 0;
cout << "此方程无解" << endl;
}
}
int main()
{
int n, i;
double c[120], a1[120], b1[120][120],r[120][120];
double h=0,j=0,k=0;
cout << "请输入方程最高次数:";
cin >> n;
for (i = 0; i <= n; i++)
{
cout << "请输入方程系数:";
cin >>a1[i];
}
QD(n, a1, b1);
h = *(*(b1 + 0) + 0);
j = *(*(b1 + 0) + 1);
k = *(*(b1 + 0) + 2);
CJ(r, n,h,j,k,a1,b1);
cout << "此方程共有" << *(*(r + n - 2) + 0) << "个解" << endl;
for (i = 1; i <= *(*(r + n - 2) + 0); i++)
{
cout << "x" << i << "=" << setiosflags(ios::fixed) << setprecision(14) << *(*(r + n - 2) + i) << endl;
}
system("pause");
return 0;
}
C语言解一元高次方程代码,拜求大佬,这代码里面是什么意思,这是一个求一元高次方程的代码...相关推荐
- 创建方法求两个数的最大值max2,随后再写一个求3个数的最大值的函数max3。 要求:在max3这个函数中,调用max2函数,来实现3个数的最大值计算
//创建方法求两个数的最大值max2,随后再写一个求3个数的最大值的函数max3.//要求:在max3这个函数中,调用max2函数,来实现3个数的最大值计算public static int max3 ...
- java求长方体体积用什么类_Java题求解: 设计一个求长方体的体积和表面积的类Cube,包括以下属性和方法。 l1:长方体...
展开全部 完整代码如下,复制到eclipse中运行:public class Cube { private double l1;// 长 private double w1;// 宽 private ...
- Java:创建方法求两个数的最大值max2,然后再写一个求三个数的最大值max3
public class TestDemo{public static int max2(int a,int b){ //先写两个数的最大值max2函数return a > b ? a : b ...
- c语言计算二次函数顶点坐标,C语言编写一个求一元二次方程的实根的程序。 编辑一个小程序去做一元二次方程的求解(b^24ac)...
导航:网站首页 > C语言编写一个求一元二次方程的实根的程序. 编辑一个小程序去做一元二次方程的求解(b^2>4ac) C语言编写一个求一元二次方程的实根的程序. 编辑一个小程序去做一元二 ...
- 用C语言解“逆序的三位数”问题
7-3 逆序的三位数 程序每次读入一个正3位数,然后输出按位逆序的数字.注意:当输入的数字含有结尾的0时,输出不应带有前导的0.比如输入700,输出应该是7. 输入格式: 每个测试是一个3位的正整数. ...
- Algorithm:C++/python语言实现之求旋转数组最小值、求零子数组、求最长公共子序列和最长公共子串、求LCS与字符串编辑距离
Algorithm:C++/python语言实现之求旋转数组最小值.求零子数组.求最长公共子序列和最长公共子串.求LCS与字符串编辑距离 目录 一.求旋转数组最小值 1.分析问题 2.解决思路 二.求 ...
- C语言编程>第二十周 ② 下列给定程序中,函数fun的功能是:求出数组中最大数和次最大数,并把最大数和b[0]中的数对调、次最大数和b[1]中的数对调。
例题:下列给定程序中,函数fun的功能是:求出数组中最大数和次最大数,并把最大数和b[0]中的数对调.次最大数和b[1]中的数对调. 注意:不要改动main函数,不能增行或删行,也不能更改程序的结构. ...
- c语言 解元二次函数的源代码,学霸强推,高中数学万能解题方法,对数学一筹莫展的你必看!...
数学不好怎么办,你有多头疼数学成绩?你还担心自己学不好数学吗?其实只要掌握学习的方法,数学就能迅速提升. 今天,小编整理了一份学霸们强推的数学解题方法,对大家肯定有帮助,数学不好的一定要看! 本文适合 ...
- java设计求圆的面积周长的代码_java编程 1.设计一个求圆的面积和周长的类,要求:1计算当半径r=10和20时,圆的面积,并显示出来 、...
导航:网站首页 > java编程 1.设计一个求圆的面积和周长的类,要求:1计算当半径r=10和20时,圆的面积,并显示出来 . 时间:2018-11-8 java编程 1.设计一个求圆的面积和 ...
最新文章
- 项目中常用的19条MySQL优化
- 自学python要看哪些书籍-学习Python编程的最好的7本书
- linux ps1 目录颜色,Linux下PS1终端下的颜色设置
- 关于IOCP乱序的探讨
- 笔记 英语二 考研先导课 0126
- 计算机基础知识教程 百度,28、如何上网--电脑基础知识
- SparkSQL源代码:GlobalTempView与LocalTempView
- 什么是 PostgreSQL 横向子查询?
- 手机背景图片在安卓手机上不显示
- mongodb常用命令脚本化-自动化运维
- 2019语言与智能技术竞赛
- 分区助手磁盘移动毁我双系统
- WIN10专业版激活后变成教育版怎么解决
- 数字麦克风PDM信号采集与STM32 I2S接口应用(三)
- Python爬虫(1)
- 工程力学(13)—扭转二:等值圆轴横截面上的应力
- java小折叠车测评_java的折叠车怎么样?
- CNN网络模型大总结【持续更新中...】
- netstat -i和-s
- 二级c语言 真题,全国计算机二级c语言历年真题完整版.doc