如何用MATLAB求解该方程?麻烦提供源代码.方程见图,求i.

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/19 18:33:42
如何用MATLAB求解该方程?麻烦提供源代码.方程见图,求i.如何用MATLAB求解该方程?麻烦提供源代码.方程见图,求i.如何用MATLAB求解该方程?麻烦提供源代码.方程见图,求i.刚才的回答太复

如何用MATLAB求解该方程?麻烦提供源代码.方程见图,求i.
如何用MATLAB求解该方程?麻烦提供源代码.

方程见图,求i.

如何用MATLAB求解该方程?麻烦提供源代码.方程见图,求i.
刚才的回答太复杂了.我的回答很直接,程序主要语句只有三句,运算速度也比他的快多了.在-2到2之间两个结果:i = -1.7072 或 -0.4088
但没有他的精度高.
程序如下.最后是运行结果.
x=-2:0.0001:2;
sum=ones(size(x))*1.26./1.2;
for n=1:20;
sum=sum-x.*(x+1).^n./((x+1).^n -1);
end
% sum;
abssum=abs(sum);
% smin=min(abssum),
n=find(abssum

为了看着舒服,把你的i替换成了x。为了提高计算效率,方程做了变换,具体的看下面推导

可以采用不动点迭代法。即选定一个初值(这里选初值为0),代入等式右端,得到一个新的x值,再代入又得到一个x,不停的重复,直到达到精度要求。


matlab代码如下:


tic
x = 0 ;
kmax=1000;
for kk = 1:kmax    
    xt=1/(1+x) ; % (x+1)^(i-1) ;
    S=0; % sum[(x+1)^(i-1)]
    iS=0; % sum(1/S) ;
    for i=1:20
        xt = xt*(x+1) ;
        S = S + xt ;        
        iS = iS + 1/S ;
    end
    x_new = (1.26/1.2 - iS)/20 ;
    if( abs(x_new-x) < 1E-12 )
        disp(' ')
        info = sprintf('迭代收敛!共迭代%d次\nx=%.13f',kk,x_new);
        disp(info)
        disp(' ')
        break;
    end
    x = x_new ;
    
end
if( kk == kmax )
    disp(' ')
    disp('迭代失败')
    disp(' ')
end
toc


matlab计算结果:


迭代收敛!共迭代151次
x=-0.4087705455543
 
Elapsed time is 0.001385 seconds.


兄弟,这个问题看起来简单,解决起来很需要有数学基础和编程基础,分太少了,别人都不愿意干。我刚好早起闲了,给你搭把手。再加点分比较合理。

clear;clc;

n=1:20;

f=@(i)1.2*sum(i*(i+1).^n./((i+1).^n-1))-1.26;

fplot(f,[-2,1]);ylim([-1 1])%从图中可以看到方程有两个实数解,分别在-1.5和-1附近

i(1)=fzero(f,-1.5);

i(2)=fzero(f,-1)

arrayfun(f,i)