MATLAB: Assignment has more non-singleton rhs dimensions than non-singleton subscripts

non-singleton

clear all clc
syms h;
v0=150:10:230;
c = [1 2 5 6 10 15 20 30 40];
th = zeros(length(v0), length(c));
tp = 0.1;
for i = 1:length(c)
for j = 1:length(v0)
t1 = (log(1+0.0509683996*c(i)*v0(j)))/c(i);
assume(h, 'real')
a = 1*10^10*c(i).^2;
b = 21962000000*c(i);
f = (-2*10^10)*c(i)*sqrt(3)-(4*10^8)*(v0(j).^2)-98100000*c(i)+36460944400;
d = (8*10^7)*(v0(j).^2)-(4*10^19)*sqrt(3)-157705560;
e = (4*10^6)*(v0(j).^2)+88400962361;
th (i,j) = vpasolve((a*h^4)+(b*h^3)+(f*h^2)+(d*h)-(e),h,[tp t1]);
t1 = 0;
end
end

Best Answer

The output of vpasolve seems to be returning empty solutions. You can detect if the solutions are empty and assign an eps value instead but it seems all of your solutions return empty ones. That has to do something with your equation. Try this:

syms h;
v0=150:10:230;
c = [1 2 5 6 10 15 20 30 40];
th = zeros(length(v0), length(c));
tp = 0.1;
for i = 1:length(c)    
    for j = 1:length(v0)    
    t1 = (log(1+0.0509683996*c(i)*v0(j)))/c(i);    
    assume(h, 'real')    
    a = 1*10^10*c(i).^2;
    b = 21962000000*c(i);
    f = (-2*10^10)*c(i)*sqrt(3)-(4*10^8)*(v0(j).^2)-98100000*c(i)+36460944400;
    d = (8*10^7)*(v0(j).^2)-(4*10^19)*sqrt(3)-157705560;
    e = (4*10^6)*(v0(j).^2)+88400962361;
    res=vpasolve((a*h^4)+(b*h^3)+(f*h^2)+(d*h)-(e),h,[tp t1]);
    if isempty(res)
        th (i,j) = eps;%you need to assign a value, this is a very small one,eps=2.2e-16
    else
        th(i,j)=res;
    end
    t1 = 0; 
    end
end