Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация
 
nhr
Новичок
1 / 1 / 0
Регистрация: 08.09.2011
Сообщений: 31
22.09.2011, 16:11     метод хорд   #1
Помогите добить задачу по матлабу, методом хорд!!
вот код, где тут ошибки??
Код Code
1
2
3
4
5
6
7
8
9
10
11
12
function[a,k,f1_a]=xrd(a,b,eps); 
k=0; 
while( abs(b-a)>eps) 
   c=a-f1(a)*(b-a)/(f1(b)-f1(a));  
    k=k+1; 
    if(f1(a)*f1(c)<0) 
        b=c; 
    else a=c; 
    end 
end 
f1_a=f1(a) 
end
еще совсем недавно попытался поменять условия выхода, но все-равно что-то не так! количество итерации неизменно!!
Код Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function[a,k,f1_a]=xrd(a,b,eps)
%clear all;
k=0;
stop=1;
while stop==1
        k=k+1;
   c=a-f1(a)*(b-a)/(f1(b)-f1(a));
      x0=c;
   if abs(x0-c)<=eps
       stop=0;
   else stop=1;
    end
end
f1_a=f1(a)
end
AdAgent
Объявления
22.09.2011, 16:11     метод хорд
xARAx
Новичок
16 / 16 / 2
Регистрация: 08.05.2011
Сообщений: 28
22.09.2011, 19:36     метод хорд   #2
А у какой функции ноль ищите? Просто я тут ввел свою функцию f1(x) и у меня k меняется и корень вычисляется точно, хотя в методе не разбирался. Посмотрел первый листинг.
nhr
Новичок
1 / 1 / 0
Регистрация: 08.09.2011
Сообщений: 31
22.09.2011, 20:25  [ТС]     метод хорд   #3
y=7.5046*x.^4 +11.0866*x.^3 +3.8239*x.^2 +0.442*x -0.4797;
y=x-sin(x)-0.25;

вот эти!
Не можете написать, количество итерации этих ф-ий, может у меня что-то с программой
xARAx
Новичок
16 / 16 / 2
Регистрация: 08.05.2011
Сообщений: 28
22.09.2011, 21:17     метод хорд   #4
В общем с этими функциями программа действительно плохо работала. Я написал программу, но осовываясь на
этой информации про метод хорд

Код C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function f
 
[a,k,f1_a]=xrd(0,2,0.1)
 
 
 
%строим график
ii=1:1:100;
x=ii*0.04;
for i=[ii]
    f1_plot(ш)=f1(x(i));
end
plot(x,f1_plot)
%строим график
 
 
 
function[x1,k,f1_a]=xrd(a,b,eps); 
k=0; 
x0=a;%край отрезка
x1=b;
x2=(b-a)/2;% в начале в центре отрезка
while( abs(x2-x1)>eps) 
    x0=x1;
    x1=x2;
    x2=x1-f1(x1)*(x1-x0)/(f1(x1)-f1(x0)); 
    
    k=k+1; 
    k;
    
end 
f1_a=f1(x2);
end
 
function f=f1(x)
       f=7.5046*x^4 +11.0866*x^3 +3.8239*x^2 +0.442*x-0.4797; 
end
end
Вроде тот метод, что и требовался. И вроде работает.
nhr
Новичок
1 / 1 / 0
Регистрация: 08.09.2011
Сообщений: 31
22.09.2011, 23:04  [ТС]     метод хорд   #5
видишь, в чем мои сомнения, что при этом методе ответ правильный, fzero подсказал(: но вот итерации, разве может такое быть, что они идут по очереди, т.е. точность 1е-5: k=9
1e-9: k=10
1e-11:k=11

я еще во как придумал, но там все-равно 1е-5: k=4
1e-9: k=5
1e-11:k=6
Код Code
1
2
3
4
5
6
7
8
9
10
11
12
function[a,k,f1_a]=xrd2(a,b,eps)
k=0; 
while( abs(a-b)>eps)
    x1=f1(a);
    x2=f1(b);
   c=b-x2*(b-a)/(x2-x1);
   a=b;
    k=k+1; 
    b=c; 
end  
    f1_a=f(b)
end
nhr
Новичок
1 / 1 / 0
Регистрация: 08.09.2011
Сообщений: 31
26.09.2011, 19:21  [ТС]     метод хорд   #6
НУ почему???
Сказали, что за x0 выбран отрезок не правильно, он должен выбираться исходя из теоремы.
Итого: теорему реализовал, а программа НЕ РАБОТАЕТ.
Помогите, пожалуйста!

Код Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function[x2,k,f1_a]=xrd(a,b,eps)
k=0;
x1=b;
%x2=(b-a)/2;% в начале в центре отрезка
if(abs(pr1(a))>abs(pr1(b)))
    M=abs(pr1(a));%максимум первой производной
    m=abs(pr1(b));%минимум первой производной
else
    m=abs(pr1(a));
    M=abs(pr1(b));
end
if(f1(a)*pr2(a)<0)% pr2 вторая производная
    x0=a;
else x0=b;
    
    del=5;
while(del>(eps)*(M-m)/M) 
    x2=x1-f1(x1)*(x1-x0)/(f1(x1)-f1(x0)); 
    del=abs(x1-x0);
    x0=x2;
    k=k+1; 
end    
end 
f1_a=f1(x2);
end    
Добавлено через 1 час 0 минут
Все работает, все правильно!
никто не придерется

Код Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function[x1,k,f1_a]=xrd(a,b,eps)
k=0;
x1=b;
x2=(b-a)/2;% в начале в центре отрезка
if(abs(pr1(a))>abs(pr1(b)))
    M=abs(pr1(a));
    m=abs(pr1(b));
else
    m=abs(pr1(a));
    M=abs(pr1(b));
end
 
if(f1(a)*pr2(a)<0)
    x0=a;
else x0=b;
end
 
while(abs(x2-x1)>=(eps)*(M-m)/M)
    %x0=x1;
    x1=x2;
    x2=x1-f1(x1)*(x1-x0)/(f1(x1)-f1(x0));
    k=k+1;
end
f1_a=f1(x2);
end
Yandex
Объявления
26.09.2011, 19:21     метод хорд
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Опции темы

Текущее время: 18:03. Часовой пояс GMT +4.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.
Яндекс.Метрика