用matlab求解方程非线性方程

matlab求解非线性方程_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
matlab求解非线性方程
大小:876.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢随笔 - 60&
文章 - 0&评论 - 6&trackbacks - 0
通过实例验证加速对简单迭代的改进效果,注意到加速法使在简单迭代情况下不收敛的迭代方程也能收敛,这也是迭代法的特色哦。&实例:&f(x)=x^3+10*x-20 精确到6位小数迭代方程:&&&& &(1)& 20/(x.^2+10);&(2)&&&&&&& x.^3+11*x-20;&(3)&&&&&&& 2-x.^3/10& 简单迭代:%简单迭代法 use structure& i=2;N=100;x0=1.5;%设初始值%f=inline('20/(x.^2+10)');&&&&&&&&& %我到现在还没有找到如何把函数(迭代方程)以参数的形式输入程序的方法f=inline('x.^3+11*x-20');%f=inline('2-x.^3/10');x1=f(x0);S.result=[x0;x1];while abs(x1-x0)&=1e-6&&& x0=x1;&&& x1=f(x0);&&& if i&=N|abs(x1)&1e6&&&&&&&&&&&&&&&&&&&&&&& %这样判断发散是不是有点儿笨啊?应该用abs(x1-x2)来判断&&&&&&& warning('迭代次数过的,请调整迭代方程!');&&&&&&&&&& else&&&&&&& i=i+1;&&&&&&& S.result(i)=x1;&&& endendS.step=[(0:i-1)]';fprintf('The number of steps:\t%d\n',i-1);for j=1:i&&& fprintf('%10d',S.step(j));fprintf('\t');&&& fprintf('%10.7f\n',S.result(j)); end迭代结果: &(1)& 20/(x.^2+10);15步&(2)&&&&&&& x.^3+11*x-20;46步&(3)&&&&&&& 2-x.^3/10;不收敛& 加速:Steffensen方式(Aitken方式类似)%Steffensen方法加速迭代 use structure& i=2;x0=1.5;%设初始值%f=inline('20/(x.^2+10)');%f=inline('2-x.^3/10');f=inline('x.^3+11*x-20');y=f(x0);z=f(y);x1=x0-(y-x0).^2/(z-2*y+x0);S.result=[x0;x1];while abs(x1-x0)&=1e-6&&& x0=x1;&&& y=f(x0);&&& z=f(y);&&& x1=x0-(y-x0).^2/(z-2*y+x0);&&& i=i+1;&&& S.result(i)=x1;endS.step=[(0:i-1)]';fprintf('The number of steps:\t%d\n',i-1);for j=1:i&&& fprintf('%10d',S.step(j));fprintf('\t');&&& fprintf('%10.7f\n',S.result(j)); end迭代结果: &(1)& 20/(x.^2+10);3步&(2)&&&&&&& x.^3+11*x-20;3步&(3)&&&&&&& 2-x.^3/10;5步加速效果非常好。
阅读(...) 评论()MATLAB求解非线性方程_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
MATLAB求解非线性方程
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢查看: 4780|回复: 5|关注: 0
matlab求解复杂非线性方程的问题
大家帮我看看这个非线性方程组该怎么解?
N2=int(E^2/(exp((E-u)/(1.^(-23))/300)-1),E, 5..);
N4=int(E^2/(exp((E-1.6*10^(-19)+u)/(1.^(-23))/300)-1),E, 1..);
.22e-58=N2-N4;
求出最后u的值
并告知方法,十分感谢!!
看不明白。顶起来,高人来回答
关注者: 3
你的问题貌似不好回答,我先把解决该问题的的代码发在下面:主函数yourproblem,子函数F(x)
function yourproblem
x0 = [1 1 2];
options = optimset('Display','iter','TolFun',1e-50,'TolX',1e-50);& &
[x,fval,~,output,~] = fsolve(@F,x0,options);
output.message
fval %#ok&*NOPRT&
N2=x(1)
N4=x(2)
u=x(3)
function y = F(x)
N2=x(1);
N4=x(2);
u=x(3);
f1 = @(E)E.^2./(exp((E-u)./(1.^(-23))/300)-1);
f2 = @(E)E.^2./(exp((E-1.6*10^(-19)+u)./(1.^(-23))/300)-1);
y = [N2 - quad(f1,5..e-100);
& &&&N4 - quad(f2,1..e-100);
& &&&N2-N4-0.22e-58];复制代码
最后运行结果是
& && && && && && && && && && && && && & Norm of& && &First-order& &Trust-region
Iteration&&Func-count& &&&f(x)& && && & step& && && &optimality& & radius
& &&&0& && && & 4& && && && && &2& && && && && && && && && &&&1& && && && && &1
& &&&1& && && & 8& && &&&0.171573& && && && &&&1& && && & 0.293& && && && && &1
& &&&2& && && &12& & 4.4& && & 0.414214& && &5.74e-058& && && && & 2.5
Equation solved.
fsolve completed because the vector of function values is near zero
as measured by the selected value of the function tolerance, and
the problem appears regular as measured by the gradient.
&stopping criteria details&
Equation solved.
fsolve completed because the vector of function values is near zero
as measured by the selected value of the function tolerance, and
the problem appears regular as measured by the gradient.
Stopping criteria details:
Equation solved. The sum of squared function values, r = 4.5, is less than
sqrt(options.TolFun) = 1.5. The relative norm of the gradient of r, 5.8,
is less than options.TolFun = 1.0.
Optimization Metric& && && && && && && && && && && && && && && &Options
relative norm(grad r) =&&5.74e-058& && && && && && && &TolFun =&&1e-050 (selected)
r =&&4.46e-115& && && && && && && && && && && & sqrt(TolFun) = 1.0e-025 (selected)
&&1.0e-057 *
& & 0.6617
& && && &0
& &-0.0882
但是这个结果肯定是不对的,原因不是编程有错误,而是原方程组中的数值都太小,达到了e-58和e-019这么小数量级,
我不知道matlab在这个数量级上会不会缺失精度,但是在e-019这个数量级上的积分使得N2 ,N4的值都几乎为0,数量级也在很小。
这使得fsolve函数解的迭代终止条件很容易得到满足使得求解终止。上面代码可以看到已进将终止条件TolFun',1e-50,'TolX',1e-50分别设定的很小了,
但是解得解肯定不是正确的接,事实上在数值算法的层面上说,只要是[0 0 n](n只要不太大)这样的x值总能使得F的值接近0;
所以上述程序可能又待改进,或者采用其他编程思路,望高手能够进来讨论
[ 本帖最后由 Neptune_zx 于
20:15 编辑 ]
希望高手来帮忙解决
:) 谢谢上面的高手哈!我也是算到这里不知道该怎么修改了。本来想matlab精度之类的有局限,想换用maple解,但好像maple解非线性方程局限挺大? 我用它解这个方程50%的CPU运行了半个小时没出结果
关注者: 1
尝试一下优化方法求解:先优化,再解方程。
问题还没有解决;我尝试用优化了,但不知道哪里没处理好,结果还是不对。希望高手帮忙解决
Powered bymatlab求解有无穷个根的非线性方程,怎么样取到其中几个特定解啊?已知关系式 tan(w/a*s)*(1-c*w*tan(w/a*L))-c*w+1/tan(w/a*s)=0a,c,L为常数,s[0,L]为自变量,对应每个特定的s,求出来w应该有无穷多个解,怎么_百度作业帮
matlab求解有无穷个根的非线性方程,怎么样取到其中几个特定解啊?已知关系式 tan(w/a*s)*(1-c*w*tan(w/a*L))-c*w+1/tan(w/a*s)=0a,c,L为常数,s[0,L]为自变量,对应每个特定的s,求出来w应该有无穷多个解,怎么
matlab求解有无穷个根的非线性方程,怎么样取到其中几个特定解啊?已知关系式 tan(w/a*s)*(1-c*w*tan(w/a*L))-c*w+1/tan(w/a*s)=0a,c,L为常数,s[0,L]为自变量,对应每个特定的s,求出来w应该有无穷多个解,怎么取w>0范围内的前四个较小的解.然后画出这四个w与s的关系图啊.(理论上来说应该是4条曲线)
带约束的方程求解.自己设计算法吧~可用牛顿法,通过调整初值的点可以得到不同的解.

我要回帖

更多关于 matlab求解方程 的文章

 

随机推荐