#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) и код продолжится. Если она останавливается на этом и завершается (без какой-либо другой информации), то извините, я не могу воспроизвести вашу проблему, на моей машине она работает нормально. Кроме того, ваша конкретная проблема неясно представлена в вашем исходном сообщении.