C++编程里面关于解方程

C++编程里面关于解方程,第1张

#include<iostream>

using namespace std;

void main() { int X,y;

  for ( X=0;X<=30;X++ ) {

    y=30-X;

    if ( 2X+4y==90 ) cout<<"X="<<X<<",y="<<y<<endl;

  }

}

简单来说就是用所有可能来试,满足条件者输出,跳过不满足情况。

这种方法是利用计算机计算迅速的特点来解决问题。

把你方程系数降幂排列,写成一个向量,利用roots命令即可。

>> p=[1,-6,9,-9];roots(p)

ans =

44260e+000

78701e-001 +11891e+000i

78701e-001 -11891e+000i

扩展资料

MATLAB线性方程求解

a为mn的系数矩阵。

Ø    m=n,该方程为“恰定”方程

Ø    m>n,该方程为“超定”方程

Ø    m<n,该方程为“欠定”方程

(1)恰定方程求解

方程ax+b(a为非奇异)

x=a-1 b

两种解:

①x=inv(a)b 采用求逆运算解方程;

②x=a\b    采用左除运算解方程。

(2)超定方程求解

方程 ax=b ,m>n时此时不存在唯一解。

方程解 (a'a)x=a'b

①x=(a'a)-1 a'b ——求逆法;

②x=a\b  matlab用最小二乘法找一个准确地基本解。

(3)欠定方程求解

当方程数少于未知量个数时,即不定情况,有无穷多个解存在。

matlab可求出两个解:

①用除法求的解x是具有最多零元素的解;

②是具有最小长度或范数的解,这个解是基于伪逆pinv求得的。

需要写下它的方程式:

ax+by=m

cx+dy=n

可以求得x,y的通解

x=(md-bn)/(ad-bc)

y=(mc-an)/(bc-ad)

#include<iostream>,#include<cmath>,usingnamespacestd,intmain()。

2{doublea,b,c,root1,root2;cout<<"请输入一元二次方程的系数(a,b,c)

3<<endl;cin>>a>>b>>c;if(a==0)//判断系数a是否为0{cout<<"不是一个一元二次方程”<<endl;return-1;}。

4doublet=bb-4ac;if(t<0)//判断议程是否有实根{cout<<"方程没有实根"<<endl;

return-1;}。

5if(t==0)//判断议程是否有等根root1=root2=-b/(2a);else{root1=(-b+sqrt(t))/(2a);root2=(-b-sqrt(t))/(2a);}。

6cout<<"方程的根为:"<<root1<<"和"<<root2<<endl;return0;}。

假设的情况:

输入没有错误;

x 总是在前面,y 总是在后面;

不存在某个变量系数为 0 的情况(即总是二元方程);

不考虑小数,其实考虑小数也简单,你可以自己思考如何实现。

首先,使用 scanf() 将回车之前的整个字符串扫描进来,放进 str 变量中;

之后,分别以 x y = 为界,找到它们分隔的三个字符串,即从 str 的第一位开始循环,当遇到 'x' 时,停止并将之前的所有字符存到 x 的系数字符串 xStr 中,再从 x 之后开始寻找,遇到 'y' 时将找到的 'x' 与 'y' 之间的字符存到 y 的系数字符串 yStr 中,再向后从 '=' 开始直到结束,存为结果字符串 sumStr。

这样,我们得到的三个字符串都具有相同的格式,一定可以通过某种方式将其转换为一个数字,使用同一个函数就可以做到。

对于某个字符串来说,它可能是以负号 '-' 开头,也可能以正号开头 '+',也可能没有符号,也可能为空,分别考虑:以负号开头的,将其作为负数,以正号开头或没有符号的,将其作为正数;为空的字符串将其视为 1。

截取符号之后,如果没有剩余字符了,将其视为 1,再与符号相乘,就是最终结果。

如果还有剩余,那么之后的字符都是纯数字了(不考虑小数),从字符串的最后一位往前开始循环,下标记为 i(从0开始一直到最前面的数字位数),每一位字符记为 ch,则 n=(int)(ch-'0') 就是当前字符所代表的数字,用 npow(10, i) 就得到了当前数字的实际值,把所有的乘积都加起来,就得到了总的系数的绝对值,再乘以符号,就得到了系数值。

实现了这个部分之后,假设的情况也可以一一实现了,无非就是标记归属的问题。我没有贴代码是因为我看到你问的问题非常认真,我希望你可以通过我的描述自己去实现它。这里用到了一些字符串相关的函数,例如 strlen(str) 可以获得 str 字符串的长度,strncpy(dest, src, 3) 可以将 src 字符串的前三位拷贝到 dest 字符串中,strncpy(dest, src+3, 3) 可以将 src 字符串的 4~7 位拷贝到 dest 字符串中。

1 system("title 公式法解方程"); 这一句是什么意思?无意义,去掉

2 double Δ; 这个变量让我很费解,变量名请用英文字母加数字,避免奇怪的错误。

3 double x1,x2; 你已经告诉计算机,你的根是double类型了,就是小数,怎么可能得到整数呢?南辕北辙啊。

4 sqrt(Δ) 这个函数返回值是double类型,也是小数,这个是C语言标准规定好的,由不得你改的,所以也不可能得到一个你所谓的最简平方根。

至于你想要的显示最简平方根,这个需要你自己去定义一个数据类型,自己去设计它的计算和表示方法。更深入的内容,你需要看计算机代数系统或者符号计算系统方面的资料。

先判断然后分三种类型输出:1)b^2-4ac<0 无实数根 2)b^2-4ac=0 有一根 3)b^2-4ac>0 有两根结果式=-b+sqr(b^2-4ac)/2a =-b-sqr(b^2-4ac)/2a写程序的时候把a,b,c换成你题目中的即可

我刚学C++,还不太懂。不过这里有一个不需要专业软件就可解一元超越方程的vbs代码,用它可以生成一个解一切一元超越方程的工具:

PI=4atn(1)

EN=exp(1)

function arcsin(x)

if abs(x)=1 then

arcsin=sgn(x)PI/2

else

arcsin=atn(x/sqr(-xx+1))

end if

end function

function arccos(x)

if x=1 then

arccos=0

elseif x=-1 then

arccos=PI

else

arccos=atn(-x/sqr(-xx+1))+PI/2

end if

end function

function arctan(x)

arctan=atn(x)

end function

function hsin(x)

hsin=(exp(x)-exp(-x))/2

end function

function hcos(x)

hcos=(exp(x)+exp(-x))/2

end function

function htan(x)

htan=(exp(x)-exp(-x))/(exp(x)+exp(-x))

end function

function aexp(a,x)

aexp=exp(xlog(a))

end function

function logn(n,x)

logn=log(x)/log(n)

end function

d=1e-40

x1=inputbox("请输入初值1")

x2=inputbox("请输入初值2")

fc=inputbox("请输入方程左端f(x)")

do until abs(x1-x2)<=d

x=x1

f1=eval(fc)

x=x2

f2=eval(fc)

if f1-f2=0 then

x=x2

d=10

else

x0=x2-f2(x2-x1)/(f2-f1)

if (x1-x2)(x2-x0)>=0 then

m=x1

else

m=x2

end if

x1=x2

x2=x0

end if

loop

if abs(x0)<1e-15 then x0=0

d=abs(x1-x2)

if d>1e-20 then

d=int(logn(10,d))+2

d=110^d

x=int(x0/d)

x=xd

m=int(m/d)

m=md

else

x=x

m=m

end if

if x>=m then

a=m

b=x

else

a=x

b=m

end if

msgbox("原方程的根x=" & x & " 扫描域:[" & a & "," & b & "]" )

××××××××××××××××××××××××××××××××

注释:(1)这是一段解超越方程的代码,新建一个文本文档,复制粘贴这段代码,保存为“解超越方程vbs”,双击即可运行。

(2)按提示输入两个初始值(在定义域内任取两个值),输入待求方程的左端(方程形式为f(x)=0,只要输入f(x)即可)。

(3)确认,得出一个解和一个“扫描域”,表示在此域内只有一解,重新设定初始值可以扫描其他解,有效数字通常超过十位。

(4)f(x)由基本初等函数构成,具体输入如下:

1三角函数:sin(x);cos(x);tan(x);

2反三角函数:arcsin(x);arccos(x);arctan(x);

3双曲三角函数:hsin(x);hcos(x);htan(x);

4对数函数:logn(n,x)其中n表示底数,如logn(10,5)表示以10为底对5求对数;

5指数函数:aexp(a,x)其中a表示底数,如aexp(3,11)表示3的11次方;

6其他函数:绝对值abs(x);开方sqr(x);e的次x幂exp(x);自然底数对数log(x);

7运算符号:加(+);减(-);乘();除(/);幂(^);

8注意以上函数中的括号不能省略;

9PI表示圆周率;EN表示自然底数。

以上就是关于C++编程里面关于解方程全部的内容,包括:C++编程里面关于解方程、如何用matlab解一元三次方程、用C++如何编写解二元方程组的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10139158.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存