Форум программистов, компьютерный форум CyberForum.ru Форум программистов | Компьютерный форум | Форум web-программистов | Форум по электронике и бытовой технике | Форум о софте | Научный форум | Карьера и бизнес
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, 16:11
AdAgent
Объявления
22.09.2011, 19:36   #2
xARAx
Новичок
Регистрация: 08.05.2011
Сообщений: 28
Репутация: 16 (16)
Лучшие ответы: 2
метод хорд

А у какой функции ноль ищите? Просто я тут ввел свою функцию f1(x) и у меня k меняется и корень вычисляется точно, хотя в методе не разбирался. Посмотрел первый листинг.
Другие темы раздела
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
AdAgent
Объявления
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
Объявления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Раздел Автор Дата
C++: Метод деления отрезка попалам, метод хорд, метод простых итераций 3^x-3*x=5
#include <stdio.h> #include <conio.h> #include <math.h> // функция для вычисления f(х) float f(float x) { return pow(3,x)-3*x-5;//возвращаемое значение }
С++ для начинающих BogRatiON 04.04.2014 19:32
Delphi: нелинейные уравнения (метод хорд, метод касательных, метод половинного деления)
Ребят помогите пожалуйста. Задали тему курсовой "Решение нелинейных уравнений (метод хорд, метод касательных, метод половинного деления)". Напишите хотя бы код программы в Borland Delphi 7 .
Delphi для начинающих fasstwar 01.06.2013 15:41
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); -...
Delphi для начинающих Baustrel 16.12.2011 21:11
Delphi: Сравнение эффективности различных методов решения нелинейных уравнений. Метод последовательных приближений и метод хорд.
Вот такое у меня задание, которое я никак не осилю... Сравнение эффективности различных методов решения нелинейных уравнений. Метод последовательных приближений и метод хорд. Исходные данные к проекту Коэффициент а подобрать самостоятельно так, чтобы уравнение не имело корней, имело один...
Delphi Z1P 04.03.2011 18:49
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;
Pascal (Паскаль) ShutDown 22.05.2009 00:24
Опции темы

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

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