Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 238
1

Создать М-функцию

12.10.2018, 23:05. Показов 583. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создать М-функцию, которая раскладывает функцию в точке(x0;y0)в ряд Тейлора до члена 2го порядка.
Входные параметры: функция, ее аргументы и их приращения заданные в символьном виде , координаты x0;y0, и числовые значения приращений аргументов.
Выходные параметры: символьное разложение по формуле Тейлора до 2го члена, а также приближенное значение функции z=(2x^2+y^2)^2 в точке , где x=x0+delta_x и y=y0+delta_y.

Использовать М-функцию для приближенного вычисления (0.8;2.2). Построить в одной системе координат три поверхности, в области -6<=x<=6, -6<=y<=6.
Поверхности z=(2x^2+y^2)^2, p1=(x;y), где p1 в развернутом виде:f(x0;y0)+1/1!(f'x(x0;y0)(x-x0)+f'y(x0;y0)(y-y0)) и поверхность p2=(x;y), где p2 в развернутом виде: f(x0;y0)+1/1!(f'x(x0;y0)(x-x0)+f'y(x0;y0)(y-y0))+1/2!(f''xx(x0;y0)(x-x0)^2+2f''xy(x0;y0)(x-x0)(y-y0)+f''yy(x0;y0)(y-y0))
Мой скрипт
Matlab M
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
39
40
41
function taylor2(str,x0,y0,delta_x,delta_y)
syms X Y Z x y dx dy dz z1;
z = str2func(str); %главная функция
Z=sym(z);
dzdx=diff(z,x);%первая производная по x
dzdy=diff(z,y);%первая производная по y
d2zdx2=diff(z,x,2);%вторая производная по xx
d2zdxdy=diff(dzdx,y);%вторая производная по xy
d2zdy2=diff(z,y,2);%вторая производная по yy
for x=x0;y=y0;
    str=Z;
    result=eval(Z)
    str1=dzdx;
    result1=eval(str1);
    result1=result1*delta_x;
    str2=dzdy;
    result2=eval(str2);
    result2=result2*delta_y;
    str3=d2zdx2;
    result3=eval(str3);
    result3=result3*(delta_x)^2;
    str4=d2zdy2;
    result4=eval(str4);
    result4=result4*(delta_y)^2;
    str5=d2zdxdy;
    result5=eval(str5);
    result5=result5*delta_x*delta_y;
end
disp('Символьное разложение функции по формуле Тейлора:')
disp("f(x;y)=f(x0;y0)+1/1!(f'x(x0;y0)(x-x0)+f'y(x0;y0)(y-y0))+1/2!(f''xx(x0;y0)(x-x0)^2+2f''xy(x0;y0)(x-x0)(y-y0)+f''yy(x0;y0)(y-y0))")
disp('Приближенное значение функции:')
disp(result+1/factorial(1)*(result1+result2)+1/factorial(2)*(result3+result4+2*result5))
 
[x,y]=meshgrid(-6:0.1:6,-6:0.1:6);
z=(2*x^2+y^2)^2;
surf(x,y,z)
hold on;
z1=result+1/factorial(1)*(result1+result2);
surf(x,y,z1)
z2=result+1/factorial(1)*(result1+result2)+1/factorial(2)*(result3+result4+2*result5);
surf(x,y,z2)

Запускаю скрипт: >> taylor2('@(x,y)(2*x^2+y^2)^2',1,1,0.8,2.1)

Матлаб строит первую поверхность, а следующие две не строит, где у меня ошибка? Она где-то в конце скрипта, где обозначена область x и y,

Ладно, забудем пока мой вопрос про отказ кода строить поверхности. У меня другой вопрос, обратите внимание на строки скрипта № 38 и 39, там вычисляется значение функции разложенной по формуле Тейлора до 1 члена (№38) и до второго члена по формуле Тейлора (№39). Запустите скрипт командой: >> taylor3('@(x,y)(2*x^2+y^2)^2',1,1,0.8,2.2)

Обратите внимание, что приближенное значение на разложении до 1го члена сильно отличается от значения, при разложении до 2го члена, разве такое может быть? Я ожидал увидеть минимальную разницу между этими значениями, ну может быть где-то разница на десятые, сотые, но никак не на почти 100.
Может быть я неправильно понимаю смысл разложения? То есть такая большая разница, между разложением до 1 и до 2 , это обычное дело?
Кликните здесь для просмотра всего текста
Matlab M
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
39
function taylor3(str,x0,y0,delta_x,delta_y)
syms X Y Z x y dx dy dz z1;
z = str2func(str); %главная функция
Z=sym(z);
dzdx=diff(z,x);%первая производная по x
dzdy=diff(z,y);%первая производная по y
d2zdx2=diff(z,x,2);%вторая производная по xx
d2zdxdy=diff(dzdx,y);%вторая производная по xy
d2zdy2=diff(z,y,2);%вторая производная по yy
for x=x0;y=y0;
    str=Z;
    result=eval(Z)
    str1=dzdx;
    result1=eval(str1);
    result1=result1*delta_x;
    str2=dzdy;
    result2=eval(str2);
    result2=result2*delta_y;
    str3=d2zdx2;
    result3=eval(str3);
    result3=result3*(delta_x)^2;
    str4=d2zdy2;
    result4=eval(str4);
    result4=result4*(delta_y)^2;
    str5=d2zdxdy;
    result5=eval(str5);
    result5=result5*delta_x*delta_y;
end
disp('Символьное разложение функции по формуле Тейлора:')
disp("f(x;y)=f(x0;y0)+1/1!(f'x(x0;y0)(x-x0)+f'y(x0;y0)(y-y0))+1/2!(f''xx(x0;y0)(x-x0)^2+2f''xy(x0;y0)(x-x0)(y-y0)+f''yy(x0;y0)(y-y0))")
disp('Приближенное значение функции:')
disp(result+1/factorial(1)*(result1+result2)+1/factorial(2)*(result3+result4+2*result5))
 
[x,y]=meshgrid(-6:0.1:6,-6:0.1:6);
z=(2*x^2+y^2)^2;
surf(x,y,z)
hold on;
z1=result+1/factorial(1)*(result1+result2)
z2=result+1/factorial(1)*(result1+result2)+1/factorial(2)*(result3+result4+2*result5)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2018, 23:05
Ответы с готовыми решениями:

Создать функцию для вычисления величин. Создать программу которая использует данную функцию
Создать функцию для вычисления величин. Создать программу которая использует данную функцию. ...

1. Создать пользовательскую функцию. Используйте операторы if и Case. 2. Создать Пользовательскую Форму, использующую функцию
1) Создать пользовательскую функцию. Используйте операторы if и Case. 2) Создать Пользовательскую...

Описать функцию в классе Name и создать объект, вызывающий данную функцию.
Описать функцию в классе Name и создать объект, вызывающий данную функцию. Проверить истинность...

Создать функцию, сортирующую данную структуру, и функцию для поиска нужного значения в структуре
задание: Создать массив, элементами которого являются структуры – список журналов и газет...

0
12.10.2018, 23:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2018, 23:05
Помогаю со студенческими работами здесь

Создать функцию работы с устройствами ввода-вывода или функцию с применением функционалов. MuLisp
Задание: Создать функцию определение нажатой клавиши, вернуть код клавиши. Функция должна быть без...

Создать функцию, которая будет вызывать другую функцию
Доброго времени суток. Изучаю PHP и вот столкнулся с такой практикой, не знаю как реализовать....

Как создать функцию, принимающую в качестве аргумента иную функцию, в которой есть параметры по умолчанию?
У меня имеется функция msk с параметрами по умолчанию double msk(double a = 0.0, double b = 1.0) И...

Дали курсач,создать морской бой. Нужно создать функцию
Нужна функция с помощью которой можно размещать 1местные корабли #include &lt;iostream&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru