# fsolve Assignment has more non-singleton rhs dimensions than non-singleton subscripts

1 view (last 30 days)
Meva on 20 Aug 2016
Commented: Walter Roberson on 21 Aug 2016
Hi, I have a symbolic integration and I need to use fsolve for my nonlinear 2 by 2 system:
function F=torder1(x)
% clear all; clc; close all;
x_1=[0:0.01:1];
b=0.6;
T = [0:0.01:1]; % this is time vector
clear x_1;
syms x_1 h theta kappa
f_11(x_1,h,theta) = 1-( (h+(x_1-b)*theta)^2/(h+(x_1-b)*theta-1*x_1*(1-x_1))^2 );
f_21(x_1,h,theta) = (x_1-b)/2*( 1-( (h+(1-b)*theta)^2/(h+(x_1-b)*theta-x_1*(1-x_1))^2 ));
fint_1 = int(f_11, x_1);
fint_2 = int(f_21, x_1);
x_1=1;
upper_1=subs(fint_1);
upper_2=subs(fint_2);
clear x_1;
x_1=0;
lower_1=subs(fint_1);
lower_2=subs(fint_2);
clear x_1;
integral_result_1old=upper_1-lower_1;
integral_result_2old=upper_2-lower_2;
h0 = kappa *b*(1-b);
theta0 = kappa*(1-2*b);
integral_result_1 = subs(integral_result_1old, {h, theta}, {x(1), x(2)})
integral_result_2 = subs(integral_result_2old, {h, theta}, {x(1), x(2)})
%
F = [x(1) - integral_result_1 -h0;
x(2) - integral_result_2 - theta0]
When I use this code, I have the error in the title.
Thanks for help.

Walter Roberson on 20 Aug 2016
integral_result_1 and integral_result_2 are symbolic functions, not symbolic formula and not numeric values. They are functions of x_1, h, theta , but when numeric x are passed in, they are independent of x_1, h, and theta, but dependent on the undefined kappa. You cannot do a vertical concatenation of two functions, it appears. And if you could, then they would be the wrong data type (function) for an fsolve result. If you changed them so that they were symbolic expressions instead of symbolic functions then you would still have the undefined symbol kappa.
The function that you apply fsolve() to must return numeric values.
##### 2 CommentsShow 1 older commentHide 1 older comment
Walter Roberson on 21 Aug 2016
Change
f_11(x_1,h,theta) = 1-( (h+(x_1-b)*theta)^2/(h+(x_1-b)*theta-1*x_1*(1-x_1))^2 );
f_21(x_1,h,theta) = (x_1-b)/2*( 1-( (h+(1-b)*theta)^2/(h+(x_1-b)*theta-x_1*(1-x_1))^2 ));
to
f_11 = 1-( (h+(x_1-b)*theta)^2/(h+(x_1-b)*theta-1*x_1*(1-x_1))^2 );
f_21 = (x_1-b)/2*( 1-( (h+(1-b)*theta)^2/(h+(x_1-b)*theta-x_1*(1-x_1))^2 ));
Change
F = [x(1) - integral_result_1 -h0;
x(2) - integral_result_2 - theta0];
to
F = [double(x(1) - integral_result_1 -h0);
double(x(2) - integral_result_2 - theta0)];