Консультация № 200340
27.02.2021, 14:41
0.00 руб.
0 8 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Написать программу на языке программирования высокого уровня Pascal для решения задачи
Задание. Для экспериментально полученной прямой ветви вольт- амперной характеристики полупроводникового диода при u < 0,6 В подобрана аппроксимация в виде степенного многочлена:
i = au + bu2 + cu3+du4+eu5
где ток i задан в миллиамперах, напряжение u - в вольтах. Используя аппроксимацию, найдите напряжение на диоде, при котором через него будет протекать ток i=11мА. При составлении уравнения используйте параметры:
a=0,2 мА/В,
b=97 мА/В2,
c=88 мА/В3,
d=350 мА/В4
e=112 мА/В5.

Обсуждение

давно
Старший Модератор
31795
6196
27.02.2021, 18:14
общий
Адресаты:
i = au + bu2 + cu3+du4+eu5

Это

i = au + bu^2 + cu^3+du^4+eu^5
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404364
30
27.02.2021, 18:18
общий
Да, верно! Ошибся
давно
Старший Модератор
31795
6196
27.02.2021, 21:30
общий
это ответ
Здравствуйте, Barsik22!

Смотрите код:
[code lang=pascal]const
a=0.2;
b=97;
c=88;
d=350;
e=112;
x=0.0001;
var
i,u:real;
function VAKh(v:real):real;
begin
VAKh:=a*v+b*v*v+c*v*v*v+d*v*v*v*v+e*v*v*v*v*v;
end;
begin
u:=0.6;
if VAKh(u)>11 then i:=-x else i:=x;
while (VAKh(u)-11)>x do u:=u+i;
Writeln('V:=',u:10:6);
end.[/code]
Удачи!
5
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404364
30
28.02.2021, 05:37
общий
28.02.2021, 05:38
Спасибо большое!
давно
Мастер-Эксперт
259041
7459
28.02.2021, 16:27
общий
Адресаты:
В Вашем алгоритме шаг x=0.0001; постоянный. Я засомневался в хорошей работе итераций с таким шагом и написал программку вычисления "напряжение на диоде, при котором через него будет протекать ток i=11мА". Чтоб не связываться с компиляторами, я написал скрипт на VBS . Он работает исправно. Вы можете опробовать его и посмотреть / поправить код .
Для правки кода надо открыть скрипт-файл в текст-редакторе (в Блокноте например). Я добавил в код подробные комментарии.

Туповатая программка у нас получилась. Более 3000 итераций надо сделать по Вашему алгоритму для получения оптимального напряжения. Можно увеличить шаг итераций до x=0.001; для уменьшения числа итераций в 10 раз. Но тогда ухудшается точность вычисления.
Мне кажется, для таких задач полезно применить мат-методы с переменным шагом, который сначала широкий, но потом уменьшается по мере приближения к цели.
Прикрепленные файлы:
7a3655aeee882b6f30e3fc2018e43904.zip
давно
Старший Модератор
31795
6196
01.03.2021, 09:51
общий
(VAKh(u)-11)>x

С вещественными числами нельзя работать как с целыми. Х = точность вычисления(если разность меньньше точности, поиск стопорится), ну и за одно шаг итерации.

Цитата: Алексеев Владимир Николаевич
Более 3000 итераций надо сделать по Вашему алгоритму для получения оптимального напряжения.

Первоначально там было x=0.000 001, но на время поиска решения это не повлияло, максимум пол-секунды.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Мастер-Эксперт
259041
7459
01.03.2021, 13:56
общий
Адресаты:
Сегодня удалось найти на "Численные методы решения нелинейных уравнений" prog-cpp.ru/digital-find , где умненькая дева напомнила: "Метод Ньютона (метод касательных) - Если известно начальное приближение x0 корня уравнения f(X) = 0, то последовательные приближения находят по формуле:
Xi = Xi-1 - f(Xi-1) / f'(Xi-1) , где f'(X) - производная функции f(X)
.

На https://ru.wikipedia.org/wiki/Метод_простой_итерации полагают, что метод Ньютона … "является быстрым, но требует вычисления производной".
Наша степенная функция f(U) = i(U) - 11 = a·U + b·U2 + c·U3 + d·U4 + e·U5 - 11 имеет очень простую производную :
f'(U) = a + 2·b·U + 3·c·U2 + 4·d·U3 + 5·e·U4 , и поэтому идеально подходит под итерации методом Ньютона.
Я подправил свой скрипт (прилагаю), и теперь всего 4 итерации (вместо 3200 !) понадобилось для достижения в 100 раз лучшей точности!

Старик Ньютон 300 лет назад придумал восхитительный метод, а мы пользуем тупые тыки на супер-мощных компьютерах…
Прикрепленные файлы:
2114cf5fe8ccc61c7ac5418de91dcb87.zip
давно
Старший Модератор
31795
6196
01.03.2021, 14:34
общий
Адресаты:
Это все хорошо, но Автору Вопроса - это все нужно ещё сдать, чем проще код, тем ему меньше краснеть перед преподом.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа