使用Wronskian的ODE线性独立性

时间:2017-03-24 01:39:08

标签: matlab ode

  

我试图做一个能检查x和y是否是线性的函数   独立或不给予一般解决方案

     
    

cx + dy = 0

  
     

所以这就是我的代码:

    function myfun (x,y,n,n2)
% sprintf('Input function respect to t');
r = [1,x,y];
% n=Degree of power in functions in f1
% n2=input('Degree of power in functions in f2 
syms t
syms r
if n==1 && n2==1
    A=[r;diff(r,t,1);diff(r,t,1)];
    W=det(A);
    if W==0
        sprintf('Linearly Independent');
    else
        sprintf('Linearly Dependent');
    end
end
if n==1 && n2==2
    A=[r;diff(r,t,1);diff(r,t,2)];
    W=det(A);
    if W==0
        sprintf('Linearly Independent');
    else
        sprintf('Linearly Dependent');
    end
end
if n==2 && n2==2
    A=[r;diff(r,t,1);diff(r,t,2)];
    W=det(A);
    if W==0
        sprintf('Linearly Independent');
    else
        sprintf('Linearly Dependent');
    end
end
if n==2 && n2==4
    A=[r;diff(r,t,1);diff(r,t,4)];
    W=det(A);
    if W==0
        sprintf('Linearly Independent');
    else
        sprintf('Linearly Dependent');
    end
end When i try to run it for eg. myfun('2*t^2','t^4',2,4) , it gives error
     
    

矩阵必须是方形的。     myfun出错(第39行)     W = DET(A);

  
     

但是当我单独运行它时,代码确实有效。这是否意味着我   错误地传递了这个功能还是有人可以帮助我?

编辑:这是我早期的代码大纲:

>> r=[1,2*t^2,t^4]

r =

[ 1, 2*t^2, t^4]

>>  A=[r;diff(r,t,1);diff(r,t,4)];
    W=det(A);
>> W

W =

96*t

>> A

A =

[ 1, 2*t^2,   t^4]
[ 0,   4*t, 4*t^3]
[ 0,     0,    24]

1 个答案:

答案 0 :(得分:0)

正确 - 所以你提供了x和y作为t的函数,但你在myfun中有一个新的符号t由

定义
syms t

在定义x和y方面,t与t无关。你也在myfun中重新定义了r!

因此,删除r的重新定义并将t传递给函数,如下所示:

function myfun(t,x,y,n,n2)
   r = [1,x,y];
   A=[r;diff(r,t,n);diff(r,t,n2)];
   W=det(A);
   if W==0
      fprintf('Linearly Dependent');
   else
      fprintf('Linearly Independent');
   end
end

请注意,您不需要分别测试每对n1和n2。

sprintf也会将结果打印到字符串

str = sprintf(...)

要打印到屏幕,您需要使用

fprintf(1, 'Linearly Independent');

1表示打印到屏幕。如果它被文件标识符替换,它将打印到文件。查看fprintf文档。

现在在函数外部定义t并将函数调用为:

syms t
myfun(t, 2*t^2',t^4, 1, 2)

哦,还有一件事

W == 0 => L.Dependence
W ~= 0 => L.Independence