Как указать функцию для использования с улучшенным кодом Эйлера

#matlab #ode #euler-math-toolbox

#matlab #ode #euler-math-toolbox

Вопрос:

Я пишу код для выполнения улучшенного метода Эйлера в ODE 1-го порядка. Моя трудность заключается в объявлении функции. Хотя синтаксис кажется правильным, matlab не знает, следует ли обрабатывать это как вектор и использовать .^ 2 или используйте ^ 2 при возведении в квадрат x и y. Я намеренно не использовал функцию, сохраненную на диске; я хочу, чтобы весь код содержался в файле m.

Я также хотел бы вывести 2 столбца X и Y рядом друг с другом в конце с заголовками столбцов.

Есть предложения? Часть этого кода была скопирована из Edwards и Penny Elementary Diffeq. Спасибо. ММ

Код Matlab:

 clc; clear; clear axes; clf; close all; 
%Inputs
x(1)=0; y(1)=1;
f=@(x,y)( y sqrt(x^2 y^2) );
a=1; b=3; n=3;
h=(b-a)/n;
% 
X=x;
Y=y;
for i=1:n;
k1=f(x,y);
k2=f(x h,y h*k1);
k=(k1 k2)/2;
x=x h;
y=y h*k;
X=[X;x];
Y=[Y;y];
end

% output X and Y
  table=[X,Y]
  table'
  

Комментарии:

1. Я не понимаю, в чем проблема. Предоставленный вами код matlab, похоже, работает, по крайней мере, в Matlab R2018b, в котором я его только что протестировал. Поскольку x, y — это просто значения, а не векторы, вы могли бы просто инициализировать их без индекса 1, как x=0; y=1; . Однако код работает как есть. Для вывода X, Y в столбце просто используйте [X,Y] .

2. Я очищаю память между несколькими запусками процедур Euler, improved Euler и Runge-Kutta. Я что-то забыл? Я получаю периодические остановки при определении функции. Спасибо. ММ

3. Я думаю, вы имеете в виду «очистку памяти между несколькими запусками» clear . Все в порядке. Я проверил, выполняется ли ваш код, а не действительность вашей схемы Эйлера / Рунге-Кутты, если вы об этом спрашиваете. Периодические остановки? Это странно. Что такое остановка? Код останавливается, а затем продолжается? Выводится ли какая-либо ошибка? Если вы новичок в Matlab, возможно ли, что вы активировали там точку останова (красный кружок)?

4. Я вышел за рамки того, что нашел в учебнике. Я сделал шаг назад и просто изучаю основы, чтобы получить базовые ответы. Остановка при определении функции означает именно это. На этом код останавливается. Я решаю по одной задаче для каждого файла .m, и все идет намного лучше. ММ

5. Мой вопрос заключается в том, завершается ли код (выдается ошибка, перестает работать, продолжить невозможно) или код приостанавливается, поэтому вы можете нажать продолжить (F5) и код продолжится. Если она останавливается на этом и завершается (без какой-либо другой информации), то извините, я не могу воспроизвести вашу проблему, на моей машине она работает нормально. Кроме того, ваша конкретная проблема неясно представлена в вашем исходном сообщении.