#include<stdio.h>
#include<math.h>
#define accuracy 0.00001
#define check -1530494977void tell()
{printf("本程序用于求解一元高次方程\n");printf("注意事项:\n");printf("1、本程序所求根均为近似解,精度可通过改变宏来调整\n");printf("2、请保证方程形如∑(i=0,n)(a_i*x^i)=0,a_i为整数\n");printf("3、请保证方程的根取值范围为(-1215752191,276447231)\n");printf("使用方法:\n");printf("1、先将方程反复求导,直至将方程化为一元二次方程\n");printf("2、解出一元二次方程的解\n");printf("3、输入方程根的上下限,等待计算机求出结果\n");printf("4、以此循环,直至求出方程的全部解\n"); printf("求解原理:\n");printf("导数根为其原函数的极值点,由于多项式函数的两个极值点内最多只有一个根,所以可以逐步逼近方程的根\n");
}void solve_equation_tow(int a,int b,int c)
{float delta,x1,x2,check_number=1,s=1;delta = (b*b)-(4*a*c);if(delta<0){printf("该方程没有实数解\n");}else if(delta==0){printf("该方程的解为x1=x2=%f\n",x1);} else{x1=(-b+sqrt(delta))/(2*a);x2=(-b-sqrt(delta))/(2*a);printf("该方程的解为:\nx1=%f\nx2=%f\n\n\n",x1,x2);}
}float f(float x,int time,int da[time+1])
{int i=0;float y=0;while(i<time+1){y=y+da[i]*pow(x,i);i++;}return y;
}float close_to_x(float x_lower_limit,float x_upper_limit,int time,int da[time+1])
{float x,y,y_left,y_right,p;int i=1;x = (x_lower_limit+x_upper_limit)/2;y_left = f(x_lower_limit,time,da);y_right = f(x_upper_limit,time,da);y = f(x,time,da);if(y_left*y_right>0) return  check;else{if (y_left>y_right){while(y>accuracy||y<-accuracy){if(y>accuracy) x_lower_limit = x;if(y<-accuracy) x_upper_limit = x;x = ( x_lower_limit+x_upper_limit)/2;y = f(x,time,da);if(x_upper_limit-x_lower_limit<=0.000001) break;}}if (y_right>y_left){while(y>accuracy||y<-accuracy){if(y>accuracy) x_upper_limit = x;if(y<-accuracy) x_lower_limit = x;x = ( x_lower_limit+x_upper_limit)/2;y = f(x,time,da);if(x_upper_limit-x_lower_limit<=0.000001) break;}}return x;}
}int der(int n,int a[n],int time)
{ int da[time+1],i=n-1,d=1,t,m;for(t=0;t<time+1;t++) da[t]=1;//对数组元素初始化 for(m=0;m<=time;m++){while(i>time-m){d=i*d;i--; }da[time-m]=d*a[n-m-1];i=n-1-m-1;d=1;}if(time==n-1) printf("最初待求原方程为:\n");else printf("当方程求导到%d次后,方程为:\n",time);for(i=time;i>0;i--) printf("(%dx^%d)+",da[i],i);printf("(%d)=0\n",da[0]);if(time==2) solve_equation_tow(da[2],da[1],da[0]);else{float root[time];float x_lower_limit,x_upper_limit;int s;for(s=0;s<time;s++){int t;printf("正在尝试求解根x%d\n",s+1);printf("请输入x的下限:");scanf("%f",&x_lower_limit);printf("请输入x的上限:");scanf("%f",&x_upper_limit);root[s]=close_to_x(x_lower_limit,x_upper_limit,time,da);if (root[s]==check) printf("该方程在此区域内无实数解\n"); else printf("x%d=%f\n",s+1,root[s]);}printf("该%d次方程的解为:\n",time);int z,q=1;for(z=0;z<time;z++){if(root[z]!=check) printf("x%d=%f\n",q,root[z]);q++;}}printf("\n\n\n");
}void main()
{ tell();int n,p;//p是方程非常数项数量,同时是方程最高次项次数,n是方程总项数 printf("\n\n\n请输入方程的最高次数:");scanf("%d",&p);n=p+1;int a[n],i;//a[n-1]是方程n-1次项系数,i用于后期计数 for(i=0;i<n;i++) //此循环用于输入各项系数 {if(i==0) printf("请输入常数项的值:");else printf("请输入%d次项的值:",i);scanf("%d",&a[i]); }printf("该方程为:");for(i=n-1;i>0;i--) printf("(%dx^%d)+",a[i],i);//打印方程,用于纠错 printf("(%d)=0\n",a[i]);//本行用于打印方程常数项 float x,y;printf("\n\n\n");for(i=3;i<=n;i++) der(n,a,i-1);
}

一元n次方程求解程序相关推荐

  1. matlab怎么重新打开新的代码,方程求解程序代码求助-程序代码修改或新的代码...

    很简单的方程求解程序,调用mulDNewton函数求解,之前在Matlab 2011b版本上运行成功,现在在Matlab 2018a版本上总是出错,程序代码和出错的提示如下,mulDNewton函数代 ...

  2. [数值计算-4]:一元一次线性方程求解 - 解析法直接求解

    作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing 本文网址:https://blog.csdn.net/HiWangWenBing/article ...

  3. java 四元一次方程_JAVA编写求解一元多次方程的程序,要求如下:

    展开全部 import java.io.*; import java.util.*;public class SolveEquation { void print()throws IOExceptio ...

  4. [数值计算-5]:一元二次非线性方程求解 - 解析法直接求解

    作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing 本文网址:https://blog.csdn.net/HiWangWenBing/article ...

  5. 一元多次方程在MATLAB中的解以及图形显示

    一元二次方程 % 求解 ax2+bx+c=0 2次方程有两个个解syms a b c x; [x] = solve(a*x^2+b*x+c==0,x,'Real',false) syms x [x] ...

  6. 一元二次方程通解方程c语言编程,一元二次方程求解程序完整代码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 下面的代码是我刚才无聊写的.对于简单的一元多次方程的迭代 #include #include #include #define MAXTIMES 5 ty ...

  7. C语言求1元2次方程的解,一元二次方程求解程序完整代码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 下面的代码是我刚才无聊写的.对于简单的一元多次方程的迭代 #include #include #include #define MAXTIMES 5 ty ...

  8. Java——求解一元n次方程(V1.0)

    Java--求解一元n次方程(V1.0) 主要思路 通过 接口(interface) 进行求解方法声明,通过 implements 声明自己使用的接口 通过字符串 equals() 方法以及 whil ...

  9. tensorflow随笔-条件循环语句求解一元多次方程

    !/usr/bin/env python2 -*- coding: utf-8 -*- """ Created on Thu Sep 6 10:16:37 2018 @a ...

最新文章

  1. Boost.SmartPtr 的快速 (CI) 测试
  2. python——面向对象篇之异常和反射
  3. c# emnu 获取注释_C# 数据操作系列 - 19 FreeSql 入坑介绍
  4. java socket 线程池_java socket编程的一个例子(线程池)
  5. html页面左右布局透明背景,HTML透明背景
  6. linux 行尾加字符串,linux – cat in expect脚本在字符串结尾添加新行
  7. 变量提升、作用域this实战(真题:看代码输出)
  8. 半个月自学入行软件测试,也许你就是下一个测试总监
  9. 无损分区工具调整硬盘分区
  10. get请求中文乱码问题解决
  11. Poker Ⅱ 机械键盘使用说明书 自备
  12. 你靠谱吗?看看“价值观”究竟有多重要
  13. 数论基本定理和欧拉广义降幂公式
  14. 执念斩长河入CSDN的第一篇日志
  15. 流程图flow-chart 教程
  16. React Native 中使用 Animated 实现物体下落动效
  17. 浅尝Clickhouse
  18. excel如何晒出重复数据_怎么筛选出excel中重复数据
  19. 双非一本考研国防科技大学计算机,【21择校】这些高校不歧视双非,保护一志愿!...
  20. 手机轻松远程投屏,用Windows电脑一次看5个抖音账号!

热门文章

  1. python递归函数1到n求和_python递归法求解累加和
  2. vue3 报错 Failed to execute ‘insertBefore‘ (在keep-alive 才会存在)
  3. GitLab-ce版本升级(14.0-14.10)
  4. office中的域、控件、com组件、宏和VBA
  5. 360大数据中心平台化的演进与实践
  6. hdu 3790(最短路径问题 SPFA算法)
  7. 我用ChatGPT写2023高考语文作文(五):北京卷I
  8. vue3 使用teleport报错 找不到‘parentNode‘节点(未解决)
  9. CentOS下为yum加入rpmForge源
  10. 关于Logcat日志输出说明