Здравствуйте, суть вопроса в том, что мне дали код на scilab, который должен решать уравнение и выводить значения на графике. Проблема не в самом описании формулы, а в ошибке, которая появляется при попытке запустить код. Сам я этот язык не знаю и не могу понять в чём именно заключается проблема.
// Задаем константы
m = 9.11e-31; // масса электрона в кг
hbar = 1.055e-34; // постоянная Планка в Дж*с
eV_to_J = 1.602e-19; // перевод эВ в Дж
// Функция для решения дисперсионного уравнения
function E_n = find_energy_levels(a, U0, n_levels)
U0 = U0 * eV_to_J; // переводим U0 в Дж
a = a * 1e-10; // переводим a в метры
E_n = zeros(n_levels, 1); // массив для хранения значений энергии
endfunction
for n = 1:n_levels
// Используем метод численного решения для нахождения E
E = cotg (sqrt(2*m*E/hbar^2)*a) + sqrt(2*m*(U0 - E)/hbar^2) / sqrt(2*m*E/hbar^2);
E_guess = n^2 * %pi^2 * hbar^2 / (2 * m * a^2); // начальное приближение
E_n(n) = fsolve(E, E_guess); // решаем дисперсионное уравнение
end
// Параметры задачи
a_values = [10, 20, 30]; // значения ширины ямы в Å
U0_values = [1, 5, 10]; // значения высоты ямы в эВ
// Находим и строим уровни энергии для каждого случая
for i = 1:length(a_values)
a = a_values(i);
U0 = U0_values(i);
E_n = find_energy_levels(a, U0, 4); // находим первые 4 значения энергии
// Отображаем результаты
disp("a = " + a + " Å, U0 = " + U0 + " эВ");
disp("Энергетические уровни (в эВ):");
disp(E_n / eV_to_J); // выводим в эВ
// Строим огибающие волновых функций
x = linspace(0, a * 1e-10, 500); // массив координат x
for n = 1:4
k1 = sqrt(2 * m * E_n(n) / hbar^2);
psi_n = sqrt(2 / a) * sin(k1 * x); // волновая функция для бесконечной ямы
plot(x * 1e10, psi_n + n); // строим сдвинутую для наглядности
hold on;
end
title("Волновые функции для a = " + a + " Å, U0 = " + U0 + " эВ");
xlabel("x (Å)");
ylabel("Ψ_n(x)");
hold off;
pause(1); // пауза между графиками
end
После цикла for выдаёт ошибку "fsolve: Неверный тип входного аргумента №1: ожидалась вещественная матрица." и в самом конце выдаёт ошибку "Неопределённая операция для указанных операндов.
проверьте или определите функцию %c_a_s для перегрузки."
С чем связана ошибка и как её можно исправить?