2012-03-17 5 views
-1
format long 
syms x landa 
eps=10^-6; %we bound the error to closer to the exact solution 
e=exp(1); % e number e=2.7 
f=inline('x+1.0000e-006*exp(80*x)-5*landa','x','landa');% this is f(x,landa) function 
ff=subs(x+1.0000e-006*exp(80*x)-5*landa',{x,landa}); 
dif_f=diff(ff); % to get the derivative 
f1=inline(dif_f);%this is our f'(x) funciton 
landa=linspace(0,1,101); 
%landa=0.01; 
deltalanda=0.01; 

x0=0; 
x=x0; 
while landa<1 
    for k=0:1000 
    y=x; 
    x=y-(f(x,landa)/f1(x)) 
    kk=f(x,landa) 
    if f(x,landa)<=eps % we continue to find the x if it is found break the iteration 
     break 
     landa=landa+deltalanda; 
     deltalanda=deltalanda*2; 
    end 
    end 
    deltalanda=deltalanda/2; 
    landa=landa+deltalanda; 
    landaa=landa; 
    ff=subs(f,landa,landaa); 
    dif_f=diff(ff); 
    f1=inline(dif_f); 
    x=0; 
end 

Может кто-нибудь скажет мне, почему я получаю ошибку в этой строке x=y-(f(x,landa)/f1(x)). Он говорит о ошибке размера матрицы.Ошибка mldivide Матричные размеры должны соответствовать

+0

Возможно, потому что это должна быть матрица NxN? Слишком много кода и слишком мало контекста для кого-либо, чтобы помочь вам. – Mikhail

ответ

0

Каковы размеры f(x,landa) и f1(x), когда вы получите сообщение об ошибке? Вы можете либо установить точку останова, либо сообщить отладчику о прекращении ошибок, и проверить размер вывода обеих функций.

Я подозреваю, что вам может потребоваться элементное разделение (./), а не деление матрицы (/). В любом случае, используя точки останова и/или отладчик, вы получите тонну.