2015-07-30 2 views
0

В MATLAB я пытаюсь запустить итерационную функцию решения, которая решает квадратичное уравнение. Каждая итерация вводится в цикл как матрица 1x1 из массива 1x6, но цикл for хочет перекодировать ответ 2x1 в выделенное пространство 1x1.Подстрочное измерение присваивания несоответствие в цикле с функцией решения, выводящей 2x1 из входов 1x1

Я исследовал ячейки и структуры, но безрезультатно я мог заставить их работать. Уравнение работает, если принять за цикл for и просто решить для каждой функции по отдельности, но цель состоит в том, чтобы масштабировать это для цикла, чтобы свернуть через намного больше, чем просто массив 1x6. Вот мой код.

Es=200E3;  %MPa 
    Ys=448;   %MPa 
    D=168.3;   %mm 
    wall=7.11;  %mm 
    Pdesign=27.25; 
    Ec=23800; 
    strainc=.003; 
    ts=7.11-7.11*.8; 

    Plive=[5.45 8.18 10.90 13.63 16.35 19.08]; 
    syms trepair; 

    for ii=1:1:length(Plive) 

     test(ii)=solve(strainc==(Pdesign*D)/(2*Ec*trepair)-Ys*ts/(Ec*trepair)-Plive(ii)*D/(2*(Ec*trepair+Es*ts))); 

    end 

Заранее благодарим за вход y'alls.

+1

Вы должны решить символический? Почему бы не переписать уравнение для решения для trepair напрямую? – Matt

+0

Мэтт, я не понимаю, как не использование символов изменяет выходной массив из 2x1. Не могли бы вы объяснить немного больше? Спасибо. – TurdFurgeson

+0

Характер вашего уравнения требует 2 решения для trepair, потому что он квадратичен относительно trepair, если я правильно сделал математику. Решение для trepair покажет вам это и поможет написать цикл (или функцию) для его решения с использованием квадратичного уравнения. – Matt

ответ

1

Результаты представляют собой массивы 2x1, поэтому вам необходимо назначить их массивам 2x1, а не массивам 1x1. Заменить test(ii) на test(2*ii-1:(2*ii)).

С другой стороны, решить с помощью PLive в качестве символического переменного, а затем использовать matlabFunction, чтобы получить решения для любого значения, которые вы хотели бы:

Plive=[5.45 8.18 10.90 13.63 16.35 19.08]; 
syms trepair Pl 
T=matlabFunction(solve(strainc==(Pdesign*D)/(2*Ec*trepair)-Ys*ts/(Ec*trepair)-Pl*D/(2*(Ec*trepair+Es*ts)),trepair));  
T(Plive)