4th order ode with eigenvalue
4 次查看(过去 30 天)
显示 更早的评论
The 4th order ode is
y'''' +5*y'''-2*i*y''-(1/A)*y'+(2-lambda)*y=0
b.c.: y(0)=y(1)=y'(0)=y'(1)=0.
In which A is a given real number, i is the imaginary unit (i^2= -1), lambda is the unknown eigenvalue.
I wrote the following code:
function mat4bvp
global A
A = 1;
lambda = -0.5+0.2*i;
solinit = bvpinit(linspace(0,1,1000),@guess,lambda);
sol = bvp4c(@stream,@bc,solinit);
x = linspace(0,1,1000);
y = deval(sol,x);
plot(x,y(1,:));
function v = guess (x)
v = [1-cos(2*pi*x)
2*pi*sin(2*pi*x)
(2*pi)^2*cos(2*pi*x)
-(2*pi)^3*sin(2*pi*x)];
function dxdy = stream(x,y,lambda)
global A
dxdy=[y(2)
y(3)
y(4)
-5*y(4)+2*i*y(3)+(1/A)*y(2)+(lambda-2)*y(1)];
function res = bc(ya,yb)
res=[ya(1)
ya(2)
yb(1)
yb(2)
ya(3)-1]; %%%The last condition is additionally imposed because lambda is to be solved for
After running it, it generated the following error:
Error using trial>bc
Too many input arguments.
3 个评论
Sahaluddin Mirza
2019-5-24
Hey T S Singh, I am facing same problem as yours. Can u pls share your code, if u solved it? I need help finding the first 5 modes of vibration and am stuck finding the 5th boundary condition.
采纳的回答
Walter Roberson
2017-7-1
You are using bvpinit() and passing in a vector of length 1 as the third parameter. That initializes "parameters" to a vector of length 1 in the problem structure, and you see that parameter showing up in the third position for your stream() function. However, when you have parameters, they are also passed to your bc function, but your bc function is not expecting anything for parameters.
function res = bc(ya, yb, lambda)
Whether you need it for the computation or not, it is going to be passed in.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Boundary Value Problems 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!