English 中文(简体)
matlab: subs on symbolic constant returns scalar instead of vector for a vector input
原标题:

usually, symbolic functions return vectors for vector inputs:

syms( x );
f=x*2;
subs(f,[1 2 3])
outputs: [2 4 6]

but doing

f=sym( 0 );
subs(f,[1 2 3]);
outputs: 0
and not: [0 0 0]

so basically, my questions is how do I make f behave as a "normal" symbolic function. I can do something ugly like f=x-x to create a function that always returns zero, but is there a prettier way?

最佳回答

Actually, there is no way.

sym( 0 ) creates a symbolic constant (0, in this case). subs() replaces all variables with each value from the given vector. However, you have no variables, so subs() just returns the given symbolic constant.

It gets better. sym() internally does some simplification, so sym( 0*x ) or sym( x-x ) both become sym( 0 ) and you get the exact same behavior. Similarly, sym( x/x ) turns into sym( 1 ) and you just get the scalar 1 back from subs() even if you pass it a vector.

The only way you re going to get around this is by writing a helper function that detects if the size() of the output from subs() is less than the vector, and turns it into the correct size of a vector if needed.

问题回答

I don t have the Symbolic Toolbox so this is a blind guess. Your function declarations don t look identical enough:

syms( x );
f=x*2;

against

f=sym( 0 );

Perhaps what you have done in the first case is define a function which returns the double of its inputs, in the second case defined a function which returns 0 whatever its inputs. Maybe

syms( x );
f=x*0;

is what you need ?





相关问题
MATLAB Solving equations problem

I want to solve these equations using MATLAB and I am sure there is a non zero solution. The equations are: 0.7071*x + 0.7071*z = x -0.5*x + 0.7071*y + 0.5*z = y -0.5*x - 0.7071*y +...

Difference between MATLAB s matrix notations

How do you read the following MATLAB codes? #1 K>> [p,d]=eig(A) // Not sure about the syntax. p = 0.5257 -0.8507 -0.8507 -0.5257 d = ...

preventing data from being freed when vector goes out of scope

Is there a way to transfer ownership of the data contained in a std::vector (pointed to by, say T*data) into another construct, preventing having "data" become a dangling pointer after the vector goes ...

Divide two polynomials using MATLAB

I want to divide p(x) by q(x) given that: p(x)=-5x^4+3x^2-6x q(x)=x^2+1 I tried: p=inline( -5*(x^4)+3*(x^2) , x ) p = Inline function: p(x) = -5*(x^4)+3*(x^2) q=inline( x^2+1 , x ) q = ...

matlab deals with Fibbonacci

The Fibonacci series is given as follows: 1, 2, 3, 5, 8, 13, 21, ... How can I write a script which calculates and prints the n-th Fibonacci term (for n>2), where n is inputed by the user. This ...

How do I plot lines between all points in a vector?

I have a vector containing some points in 2-D space. I want MATLAB to plot these points with lines drawn from every point to every other point. Basically, I want a graph with all vertices connected. ...

How do I create a string using a loop variable in MATLAB?

I have a loop like this: for i=1:no %some calculations fid = fopen( c:\out.txt , wt ); %write something to the file fclose(fid); end I want data to be written to different files like ...

热门标签