MATLAB How Can You Use the Euler Method in MATLAB to Solve y'=x^2-y^2?

AI Thread Summary
The discussion focuses on using the Euler method in MATLAB to solve the differential equation y' = x^2 - y^2 with the initial condition y(0) = 1. The user seeks clarification on the code, particularly the line y = 0*x, which initializes y as a zero vector matching the length of x, and how y(1) = 1 sets the initial condition. The user is also trying to adapt the Euler method for a second-order differential equation and is encountering an error related to matrix dimensions when attempting to incorporate a variable 'n' into the code. They request assistance in resolving this coding issue. The conversation highlights the challenges of implementing numerical methods for more complex differential equations in MATLAB.
Void123
Messages
138
Reaction score
0
I'm looking at the following example (http://www.cyclismo.org/tutorial/matlab/control.html):

y'=x^2-y^2, y(0)=1, where they use the Euler method to approximate numerical solutions.

This is the code:

>> h = 0.1;
>> x = [0:h:2];
>> y = 0*x;
>> y(1) = 1;
>> size(x)

ans =

1 21

>> for i=2:21,
y(i) = y(i-1) + h*(x(i-1)^2 - y(i-1)^2);
end
>> plot(x,y)
>> plot(x,y,'go')
>> plot(x,y,'go',x,y)

I don't understand the third and fourth line at the top. What is y = 0*x and how did they get y(1) = 1...?

Thanks.
 
Last edited:
Physics news on Phys.org
You want to make sure that the size of the 'y' vector is the same as the size of the domain vector x so you can plot one against the other one.. So they start with y=0*x which should make y a vector of all zeroes that is the same length as x. Setting y(1)=1 means that the first entry of y will be 1. This is the same thing as saying that y, at the value of x that is the first one recorded in the domain vector, should be 1 (so all they've done is chosen an initial condition)
 
Ok. I want to put y''(x) + \left(\frac{2}{x}\right) y'(x) + y^n = 0

into the following template:

Code:
function[y,t] = euler(fun,y0,t0,T,h)
% [y,t] = euler(fun,y0,t0,T,h) -
%
% This function computes the solution to the IVP y'(t) = fun(y,t),
% y(t0)= y0 , for a given function "fun(t,y)" using Euler's method.
%
% The function is defined either via an m-file fun.m, or using the
% "inline" command. y0 is the initial value, T is the maximum time, h
% is the stepsize and t0=initial time.
%
% The output is a vector containing the approximate solution y_euler.
%
y(1) = y0;
t(1) = t0;
for i=1:T/h
y(i+1) = y(i) + h*feval(fun,t(i),y(i));
t(i+1) = t(i) + h;
end;
t=t’;
y=y’;
% End of m-file euler.m
end

There are a few difficulties. First, I am working with a second order differential equation. Secondly, I am interested in a continuous range of solutions for n. For certain values of n, I have a transformation method that simplifies my equation by eliminating the y'(x). But, the main problem I'm dealing with is coding the "n" part. Whenever I try, an error message in the command box comes up that says 'matrix must be squared' and I don't know what this means.

I would appreciate any help.

Thanks.
 

Similar threads

Replies
4
Views
1K
Replies
8
Views
2K
Replies
5
Views
2K
Replies
4
Views
3K
Replies
2
Views
3K
Back
Top