用matlab解多元方程个一元五次的方程

求助matlab编程解一元四次方程组_matlab吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:134,062贴子:
求助matlab编程解一元四次方程组收藏
操盘手为您提供指导操作分析,全程跟踪到底.傻瓜式操作,赚钱.学000013,免费提供在线查询,简单易操作,讲师亲自辅导,
这个方程中初始条件 w=100 f =100 x01 =15 ,y01 =0 给出的y2是一个1:1:100的循环值, x2= sqrt(1)-112.5 然后求x1 y1 x3 y3 。我自己本人用 solve 解 ,解不出来。然后用fsolve解的时候,设y2=1开始做的 出现问题了。上网百度据说奇偶性太大,不好做。其实我有结果,就是要求matlab 解一下。结果如下
我的solve 错了 只能 fsolve
大神也可以加我qq 我们详谈
赋一个初值,然后采用迭代法,当得到的值收敛时:继续迭代下去得到的值与之前值之差的绝对值小于某个数,比如0.001,精度由你来定就行.注:ax4+bx3+cx2+dx+e=0,将x提到一侧,等于另一侧,选一个初值比如0带入右侧,得到x=这个值,再将这个值带入右侧,如此循环,直至达到上述要求。
我建议你把敲好的公式复制到这儿来。。。。。
FSOLVE可以解出来function f=myf(x,y2)x01=15;y01=0;w=100;f=100;x2= sqrt(1)-112.5;b=-x2/y2-112.5/y2; x1=x(1);y1=x(2);x3=x(3);y3=x(4);f=[sqrt(x1^2+y1^2)+sqrt((x2-x1)^2+(y2-y1)^2)-sqrt(x01^2+y01^2)-sqrt((x2-x01)^2+(y2-y01)^2)
(x3-x2)*(2*(x2-x1)*b-(y2-y1)*(1-b^2))-(y3-y2)*((x2-x1)*(1-(b)^2)+2*(y2-y1)*b)
sqrt(x1^2+y1^2)+sqrt((x2-x1)^2+(y2-y1)^2)+sqrt((x3-x2)^2+(y3-y2)^2)+x3-w
f*y1-y3*sqrt(x1^2+y1^2)]';===============================================x0=[14 0.3 2 20];fsolve(@(x)myf(x,1),x0)Equation solved, fsolve stalled.fsolve stopped because the relative size of the current step is less than thedefault value of the step size tolerance squared and the vector of function valuesis near zero as measured by the default value of the function tolerance.&stopping criteria details&ans =
那大神我这个出错错在哪里啊 function f=myfun(x1,y1,x3,y3);x01=0;y01=0;w=100;f=100;y2=0;x2=()^(1/2)-112.5;b=-x2/y2-122.5/y2;sym x1 y1 x3 y3 f(1)=(x1^2+y1^2)^(1/2)+((x2-x1)^2+(y2-y1)^2)^(1/2)-(x01^2+y01^2)^(1/2)-((x2-x01)^2-(y2-y01)^2)^(1/2)f(2)=(x3-x2)/(y3-y2)-((1-b^2)*(x2-x1)-2*(y2-y1)*b)/(2*(x2-x1)*b+(1-b^2)*(y2-y1))f(3)=w-x3-(x1^2+y1^2)^(1/2)-((x2-x1)^2-(y2-y1)^2)^(1/2)-((x3-x2)^2-(y3-y2)^2)^(1/2)f(4)=y3*((x1^2+y1^2)^(1/2))/y1-f以上是m文件[x1,y1,x3,y3]=fsolve(@myfun,[1 1 1 1])
可以循环了。谢谢各位高手
function [r,n]=mulnewton(x0,eps)if nargin==1
eps=1e-4;endr=x0-myf3(x0)*inv(dmyf(x0));n=1;tol=1;while tol&eps
r=x0-myf3(x0)*inv(dmyf(x0));
tol=norm(r-x0);
if(n&100000)
disp('h');
endendfunction df=dmyf(x)x1=x(1)y1=x(2)x3=x(3)y3=x(4)y2=1;x01=15;y01=0;x2= sqrt(1)-112.5;b=-x2/y2-112.5/y2;m1=sqrt(x1^2+y1^2)+sqrt((x2-x1)^2+(y2-y1)^2)-sqrt(x01^2+y01^2)-sqrt((x2-x01)^2+(y2-y01)^2);m2=(x3-x2)*(2*(x2-x1)*b-(y2-y1)*(1-b^2))-(y3-y2)*((x2-x1)*(1-(b)^2)+2*(y2-y1)*b);m3=sqrt(x1^2+y1^2)+sqrt((x2-x1)^2+(y2-y1)^2)+sqrt((x3-x2)^2+(y3-y2)^2)+x3-w;m4=f*y1-y3*sqrt(x1^2+y1^2);eq1=diff(m1,x1);eq2=diff(m1,y1);eq3=diff(m1,x3);eq4=diff(m1,y3);eq5=diff(m2,x1);eq6=diff(m2,y1);eq7=diff(m2,x3);eq8=diff(m2,y3);eq9=diff(m3,x1);eq10=diff(m3,y1);eq11=diff(m3,x3);eq12=diff(m3,y3);eq13=diff(m4,x1);eq14=diff(m4,y1);eq15=diff(m4,x3);eq16=diff(m4,y3);df=[eq1,eq2,eq3,eq4,eq5,eq6,eq7,eq8,eq9,eq10,eq11,eq12,eq13,eq14,eq15,eq16]function f=myf3(x)w=100;f=100;x01=15;y01=0;y2=1;x2= sqrt(1)-112.5;b=-x2/y2-112.5/y2;x1=x(1);y1=x(2);x3=x(3);y3=x(4);f=[sqrt(x1^2+y1^2)+sqrt((x2-x1)^2+(y2-y1)^2)-sqrt(x01^2+y01^2)-sqrt((x2-x01)^2+(y2-y01)^2)(x3-x2)*(2*(x2-x1)*b-(y2-y1)*(1-b^2))-(y3-y2)*((x2-x1)*(1-(b)^2)+2*(y2-y1)*b)sqrt(x1^2+y1^2)+sqrt((x2-x1)^2+(y2-y1)^2)+sqrt((x3-x2)^2+(y3-y2)^2)+x3-wf*y1-y3*sqrt(x1^2+y1^2)];
上边是根据百度知道 @dbb627的程序编写的牛顿迭代法是不是只有形似 内容还是不对。运行结果是错。求大神在此讲解。谢谢
function [r,n]=mulNewton(F,x0,eps)if nargin==2
eps=1.0e-6;endx0 = transpose(x0);Fx = subs(F,findsym(F),x0);var = sym(symvar(findsym(F)));%var is string 要变换下dF = jacobian(F,var)dFx = subs(dF,var,x0);r=x0-inv(dFx)*Fx;n=1;tol=1;while tol&eps
Fx = subs(F,findsym(F),x0);
dFx =subs(dF,var,x0);
r=x0-inv(dFx)*Fx;
%核心迭代公式
tol=norm(r-x0);
if(n&1000)
%迭代步数控制
disp('迭代步数太多,可能不收敛!');
endend================================== y2=1;x01=15;y01=0;w=100;f=100;x2= sqrt(1)-112.5;b=-x2/y2-112.5/y2;&& syms x1 x3 y1 y3 && f=[sqrt(x1^2+y1^2)+sqrt((x2-x1)^2+(y2-y1)^2)-sqrt(x01^2+y01^2)-sqrt((x2-x01)^2+(y2-y01)^2)
(x3-x2)*(2*(x2-x1)*b-(y2-y1)*(1-b^2))-(y3-y2)*((x2-x1)*(1-(b)^2)+2*(y2-y1)*b)
sqrt(x1^2+y1^2)+sqrt((x2-x1)^2+(y2-y1)^2)+sqrt((x3-x2)^2+(y3-y2)^2)+x3-w
f*y1-y3*sqrt(x1^2+y1^2)];&& [r,n]=mulNewton(f,[15 0.3 2 22]) 结果dF = [ x1/(x1^2 + y1^2)^(1/2) + (2*x1 + 221/32)/(2*((x1 + 221/64)^2 + (y1 - 1)^2)^(1/2)),
0, y1/(x1^2 + y1^2)^(1/2) + (2*y1 - 2)/(2*((x1 + 221/64)^2 + (y1 - 1)^2)^(1/2)),
6*)*(x3 + 221/64) - 9998*y3 + 9998,
3*)*(2*x1 + 221/32) - 9998*y1 + 9998,
- 9998*x3 - 6*)*(y3 - 1) - ,
- 9998*x1 - 3*)*(2*y1 - 2) - ][ x1/(x1^2 + y1^2)^(1/2) + (2*x1 + 221/32)/(2*((x1 + 221/64)^2 + (y1 - 1)^2)^(1/2)), (2*x3 + 221/32)/(2*((x3 + 221/64)^2 + (y3 - 1)^2)^(1/2)) + 1, y1/(x1^2 + y1^2)^(1/2) + (2*y1 - 2)/(2*((x1 + 221/64)^2 + (y1 - 1)^2)^(1/2)), (2*y3 - 2)/(2*((x3 + 221/64)^2 + (y3 - 1)^2)^(1/2))][
-(x1*y3)/(x1^2 + y1^2)^(1/2),
100 - (y1*y3)/(x1^2 + y1^2)^(1/2),
-(x1^2 + y1^2)^(1/2)] r =
我做了一下 出现问题,嗯,是不是我版本不对啊 。我把 var=sym改为var=syms()之后出现,这样改好像也是不对 但是总是提示这句有问题
版本的问题你改为var = findsym(F);
matlab 2010b , 2012应该可以
这是我运行的结果,但是这是在我根据百度知道 把fx转置之后得出的。如果不加那个单引号,会出现:然后我又进行循环实验,想做一个循环完成整个流程。错误一样,并且有黄色对话框提示以上是我下载2012版之后运行结果。求大神再辞指示
循环是在没加单引号的情况下产生的错误,加了单引号之后错误是
新手请教一下,哪位大神画过通频带啊,实验要画,数据我已经测量出来了,但是不会用MATLAB画通频带。。。谢谢指导!
虽然不是很懂,顶一下!
楼主骗人吧,这人我可认识回复1楼:
学习的路过……顶一下!
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或小木虫 --- 500万硕博科研人员喜爱的学术科研平台
&&查看话题
用matlab解一个含参数的一元三次方程,高手帮忙看看这个程序有什么问题,谢谢!
用matlab解一个含参数的一元三次方程:
C3*P(z)^3+C1*P(z)+D(z)-P_av=0&&
z是一线性数组,C3,C1常数,P_av是P在不同z的根的平均值。
思路是首先假设一个初始值P_av0, 然后解得P的一组根,取平均值和P_av0比较,如果收敛,则为所求的根,否则把新的平均值代回方程,再求根,直到收敛。
程序如下:
function P_real=P_distribution(a,b,e,q,d,N,m,z,P_r,Dsc)
format long
% define parameters
a=-6.36e7;& && && && && && && && && && && && && && && && && &
b=1.38e9;& && && && && && && && && && && && && && && && && &
e=8.85e-11;& && && && && && && && && && && && && && && && && && &
q=1.61e-19;& && && && && && && && && && && && && && && && &&&
d=1e-7;& && && && && && && && && && && && && && && && && &&&
% coeffecients
% start value
P_av0=0.2;& && && & % initial value for the P average
P_real=zeros(1,11);
%start the caculation
& &while 1
& && & z=m*1e-8;
& && & Dsc=-q*N*(d/2-z);
& && & c0=Dsc-P_av0;
& && & P_eq=;
& && & P_r=roots(P_eq);& &%get the roots
& && & for k=1:length(P_r)
& && && &&&P_rr=isreal(P_r(k));& &%get the real roots
& && & end
& && & pp=P_r(P_rr);
& && & P_real(1,m+1)=abs(pp);& && & %assign the real roots to the matrix
& && & m=m+1;& && && &&&%solve the equation again for another value
& && & if m>10
& && && &&&break
& && & end
& && & P_av1=mean(P_real);& & %get the average value
& && & if abs(P_av1-P_av0)<1e-11& &%less than the tolerance
& && && &&&break
& && & else
& && && &&&P_av0=P_av1;
& && & end
程序在matlab中无法运行,不知道问题出在哪里,高手帮忙看看,多谢了!
尝试了降低精度,和用fzero,
但是还是无法在matlab中运行,matlab也没有报错,不知道问题出在哪里
m>10已经给出条件了,
所以并不需要m=0呀
1.是可以运行的
2.是因为你原意是将每次preal赋给下一次的P_av1,但是你的程序是把所有的preal均值赋给pav,因为你的m一直增大,preal就越来越大。降低精度就可以看到很快就算完了。
楼上说的对&&你的m是一直增大的 应该加上m=0才行的
你可以在两个while循环之间加上m=0,不需要改精度
我的意思是把P_real数组的平均值赋给P_av1。
m增大,只是求不同z值的根,也就是一组方程的根。一共11个值。
P_real不会越来越大的,只是给数组里的每一个数赋予一个根。
或者我没有理解你的意思,这个程序能在你的机上运行吗?十分感谢!
精度降到E-51改不改m都能运行,但你不加m=0跟你的愿意是不同的
你的程序不加上m=0根本就不是你想要的,很明确的说就是错的,虽然降低精度会出现结果,但结果也是错的,所以还是请楼主加上m=0。
加了m=0 可以计出结果,十分感谢!
但是这个结果跟之前在 Igor Pro 中计得的不太一样,
所以还是有点疑惑,这个程序是不是计算我要的东西。
多谢提醒!
现在能够得到结果。
还在考虑这个结果是不是我要算的东西。
研究生必备与500万研究生在线互动!
扫描下载送金币
浏览器进程
打开微信扫一扫
随时随地聊科研

我要回帖

更多关于 matlab解二元方程 的文章

 

随机推荐