Форум программистов и сисадминов CyberForum.ru
Вернуться   Форум программистов и сисадминов CyberForum.ru > Форум Научный форум > Форум Математические программы > Форум Matlab
Восстановить пароль Регистрация

Ответ Создать новую тему
 
Старый 22.09.2011, 16:11   #1
nhr
Новичок
 
Регистрация: 08.09.2011
Сообщений: 31
Репутация: 1 (1)
метод хорд / Matlab

Помогите добить задачу по матлабу, методом хорд!!
вот код, где тут ошибки??
Код 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
Старый 22.09.2011, 19:36   #2
xARAx
Новичок
 
Регистрация: 08.05.2011
Сообщений: 28
Репутация: 16 (16)
Лучшие ответы: 2
метод хорд

А у какой функции ноль ищите? Просто я тут ввел свою функцию f1(x) и у меня k меняется и корень вычисляется точно, хотя в методе не разбирался. Посмотрел первый листинг.
Другие темы раздела Форум Matlab. Решение задач с помощью математического пакета Matlab.
Matlab функция возведения полинома в степень на matlab
помогите написать функцию на matlab возведения полинома в степень. Заранее спасибо)
функция возведения полинома в неотрицательную степень на matlab Matlab
подскажите, как создать на matlab функцию возведения полинома в неотрицательную степень. Заранее огромное спс)
Старый 22.09.2011, 20:25  [ТС]   #3
nhr
Новичок
 
Регистрация: 08.09.2011
Сообщений: 31
Репутация: 1 (1)
метод хорд

y=7.5046*x.^4 +11.0866*x.^3 +3.8239*x.^2 +0.442*x -0.4797;
y=x-sin(x)-0.25;

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

В общем с этими функциями программа действительно плохо работала. Я написал программу, но осовываясь на
этой информации про метод хорд

Код 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
Вроде тот метод, что и требовался. И вроде работает.
Старый 22.09.2011, 21:17
Google
Объявления
Старый 22.09.2011, 23:04  [ТС]   #5
nhr
Новичок
 
Регистрация: 08.09.2011
Сообщений: 31
Репутация: 1 (1)
метод хорд

видишь, в чем мои сомнения, что при этом методе ответ правильный, 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
Старый 26.09.2011, 19:21  [ТС]   #6
nhr
Новичок
 
Регистрация: 08.09.2011
Сообщений: 31
Репутация: 1 (1)
метод хорд / Matlab

НУ почему???
Сказали, что за 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
Старый 26.09.2011, 19:21
Yandex
Объявления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Автор
MathCAD Метод хорд и метод касательных
Решить функцию X^3-3*X^2+2.5 методом хорд и методом касательных, показать графики к каждому из методов.
INZA
Delphi для начинающих Метод Ньютона, метод хорд
Добрый день всем . Подскажите пожалуйста , как с помощью метода хорд найти не один , а несколько корней на уравнении ?
tipo4ek
Delphi для начинающих Метод хорд и метод половинного деления
Function Xd(a, b : real; eps : real) : real; Function Xh(a, b : real; eps : real) : real; оформить с помощью функций сверху, где Xd метод половинного деления,Xh - метод хорд, а - граница слева, b - справа, eps - точность, постоянная и дана = 0.0001 20. y(x)= 1/x - 3.37*sin(x); -...
Baustrel
Delphi Сравнение эффективности различных методов решения нелинейных уравнений. Метод последовательных приближений и метод хорд.
Вот такое у меня задание, которое я никак не осилю... Сравнение эффективности различных методов решения нелинейных уравнений. Метод последовательных приближений и метод хорд. Исходные данные к проекту Коэффициент а подобрать самостоятельно так, чтобы уравнение не имело корней, имело один...
Z1P
Pascal (Паскаль) Метод Пропорциональных Частей или метод Хорд.
Ребятя Корос написал прогу на на вичисление Методм Пропорциональных Частей Заданой функции : F:=3*sin(sqrt(x))+0.35*x-3.8 проверте павильно или нет? Заранее спасибо! жду советов! :good: Прога: program Lab1; uses crt; const a=2; b= 3; E=0.001; var i,k: integer;
ShutDown
Опции темы

Текущее время: 22:42. Часовой пояс GMT +4.

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.