Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/12: Рейтинг темы: голосов - 12, средняя оценка - 4.67
1 / 1 / 4
Регистрация: 11.04.2012
Сообщений: 17

Решение нелинейного уравнения

04.05.2012, 18:27. Показов 2773. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, никак не могу понять как реализовать на C++ решение следующего нелинейного уравнения относительно a:

https://www.cyberforum.ru/cgi-bin/latex.cgi?a = \sum_{k=1}^{n}{b}_{k}\sqrt{{c}_{k}{a}^{2} - {d}^{2}}

bk, ck, d - константы.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.05.2012, 18:27
Ответы с готовыми решениями:

Решение нелинейного уравнения
1. Написать программу нахождения приближенного решения нелинейного уравнения: -методом деления отрезка пополам -методом касательных ...

Решение нелинейного уравнения
С помощью метода итераций необходимо найти корень функции f(x) = 1/(1+exp(x)) при нулевом приближении 2,1 Пытался подставить в эту...

Решение нелинейного уравнения 2^y-1-x*y*a=0
Помогите пожалуйста с программой для нелинейных уравнений. pow(2,y)-1-x*y*a=0 возможна ли решение данного уравнения? нужно найти х и у

17
95 / 64 / 5
Регистрация: 03.07.2011
Сообщений: 148
04.05.2012, 19:02
Это же функция, а не уравнение. Или я что-то не понимаю? Как-то так, наверное
C++
1
2
3
4
5
6
7
double f(int n, double c, double b, double d){
   double a = 0;
   for (int k = 0; k < n; k++){
      a += b * sqrt(c * pow(a,2) - pow(d,2))   
   }
   return a;
}
0
1 / 1 / 4
Регистрация: 11.04.2012
Сообщений: 17
04.05.2012, 20:51  [ТС]
andy_111
Почему же функция? Вроде, нелинейное уравнение относительно "a", "a" ведь ни от чего не зависит, всё остальное известно. Я думал, оно численно решается, вот и пришёл за советом.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
04.05.2012, 21:01
Цитата Сообщение от andy_111 Посмотреть сообщение
Это же функция, а не уравнение. Или я что-то не понимаю?
ты что-то не понимаешь.

Добавлено через 2 минуты
Цитата Сообщение от akaelwins Посмотреть сообщение
как реализовать на C++ решение следующего нелинейного уравнения
А корни искать на каком-то отрезке или вообще?
0
1 / 1 / 4
Регистрация: 11.04.2012
Сообщений: 17
04.05.2012, 21:57  [ТС]
Kuzia domovenok,
Никакого отрезка, на котором они могли бы быть, не задано.
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
04.05.2012, 22:01
Решать рекурентно.
у нас есть зависимость a=f(a).
Берем произвольное a, вычисляем f(a),
подставляем в a и повторяем процесс до достижения
желаемой точности.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.05.2012, 22:12
Самое первое что приходит в голову подбирать значение а, (но для этого надо знать откуда начинать то есть хотя бы одну границу и погрешность вычислений) и проверять неравенство
Code
1
|a - f(a)| < e,
где e - погрешность.

Добавлено через 2 минуты
Берем произвольное a, вычисляем f(a)
zss,откуда знать в каком направлении от произвольного двигаться дальше?
Полюбому нужно знать границы (отрезок значений), иначе решение может длиться бесконечность
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
04.05.2012, 22:15
Цитата Сообщение от zss Посмотреть сообщение
Решать рекурентно.
у нас есть зависимость a=f(a).
Берем произвольное a, вычисляем f(a),
подставляем в a и повторяем процесс до достижения
желаемой точности.
А разве доказано, что f(a) -это сжимающая функция?

Цитата Сообщение от Avazart Посмотреть сообщение
zss,откуда знать в каком направлении от произвольного двигаться дальше?
Он прав, есть такой метод, но это метод простых итераций, основанный на какой-то теореме о сжимающих функциях. Проблема в том, что на счёт этих функций в этом случае я не уверен.
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
04.05.2012, 22:22
Методом проб и ошибок, другого варианта нет.
Если процесс будет расходиться, то пробовать другие
начальные значения.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.05.2012, 22:34
Если процесс будет расходиться, то пробовать другие начальные значения.
только возможно придется перебрать всего ничего бесконечность значений
Нужно знать либо природу ф-ции либо границы в которых находятся корни.

Может вы про это
http://ru.wikipedia.org/wiki/Метод_Ньютона
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
04.05.2012, 22:35
всё-таки попробуй методом итераций решить. Если он не будет сходиться, значит не судьба.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
float f(float x){
  float a=0.0;
  for (int k=1; k<=n; k++){a+=...}
}
 
 
x=0; x1=f(x);dx=fabs(x1-x);i=0;
while (dx>epsilon && (i<100)){
x=x1;
x1=f(x);
dx=fabs(x1-x);
i++;
}
if (i==100)cout<<"FAIL";
else cout<<x1;
1
Заблокирован
04.05.2012, 23:03
Думаю, что автор темы не полностью привел условие задачи.
В таком виде, рехнуться можно не только решения искать, но даже ОДЗ, и в таком общем виде никто и никогда такие уравнения не дает. Должны быть еще какие-то условия на коэффициенты. Например, положительность некоторых из них.
Тогда, немного покрутившись и применив классические неравенства типа Коши-Шварца, и использовав стандартные свойства, как то неотрицательность подкоренного выражения, вполне можно определить тот ОТРЕЗОК, на котором могут быть корни данного уравнения, и который подлежит обследованию.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.05.2012, 23:12
О чем и я говорю.
Как я понимаю итерационный метод может только приблизить результат, но не найти его, опять таки нужны пределы
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.05.2012, 23:19
Предлагаю найти производную ф-ции, что бы попробывать методом Ньютона изадать значение n
Миниатюры
Решение нелинейного уравнения  
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.05.2012, 23:39
Вот вычислил и проверил(Matcad) значение производной
Изображения
 
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.05.2012, 04:32
Вот что получилось, детельно правдо не проверял

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <cmath>
#include <iostream>
#include <vector>
#include <iomanip>
#include <algorithm>
using namespace std;
 
double f(int n,double a,double b[],double c[],double d)
 {
 double sum=0;
 for(int k=0;k<n;k++) sum+=  b[k]*sqrt(c[k]*a*a-d*d);
 return a-sum;
 }
//--------------------------------------------------
double dfda(int n,double a,double b[],double c[],double d)
 {
 double sum=0;
 for(int k=0;k<n;k++) sum+= b[k]*c[k]*a/sqrt(c[k]*a*a-d*d);
 return 1-sum;
 }
//--------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
int n=0;
cout<<"n= ";
cin>>n;
double *b= new double[n];
double *c= new double[n];
for(int k=0;k<n;k++)
 {
 cout<<"b"<<k+1<<"= "; cin>>b[k];
 cout<<"c"<<k+1<<"= "; cin>>c[k];
 }
double d;
cout<<"d= "; cin>>d;
double e=10e-15;
//cout<<"e= "; cin>>e;
double minc= *min_element(&c[0],&c[n]);
 
double a=sqrt(d*d/minc)+e;
//cout<<"a= "; cin>>a;
double fa=f(n,a,b,c,d);
const int count=100;
for(int i=0;i<count && fabs(fa)> e ;i++)
 {
 cout<<"f("<<a<<")= "<<setprecision(10)<<f(n,a,b,c,d)<<endl;
 cout<<"df("<<a<<")= "<<setprecision(10)<<dfda(n,a,b,c,d)<<endl;
 
 a= a - f(n,a,b,c,d)/dfda(n,a,b,c,d);
 fa= f(n,a,b,c,d);
 
 cout<<"a["<<i<<"]= "<<setprecision(10)<<a<<"  f("<<a<<")="
                     <<setprecision(10)<<fa<<endl;
 }
cout<<"result: a= "<<a<<endl;
 
delete[] b,c;
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Миниатюры
Решение нелинейного уравнения  
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.05.2012, 04:43
Долго мучался в подборе начального а, так как если неаккуратно его выбрать, то значение заганяется в область где значение ф-ции несуществует (из-за корня из отрицательного числа)и оттуда не выходит + нужно учитывать погрешность вычислений.
Хорошо что под рукой есть MathCad (кстати там походу аналогичным образом производятся вычисления корней)
1
1 / 1 / 4
Регистрация: 11.04.2012
Сообщений: 17
05.05.2012, 18:37  [ТС]
Всем большое спасибо, особенно вам, Avazart.
В общем, для начального приближения было принято взять решение уравнения для n=2.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.05.2012, 18:37
Помогаю со студенческими работами здесь

Решение нелинейного уравнения
Помогите кто нибудь решить нелинейное уравнение , неделю пытаюсь все никак не получается если можно скиньте код с++ очень надо Спасибо ...

Решение нелинейного уравнения.
Товарищи программисты! У меня к вам просьба прошу помочь мне с задачей. Мне нужно составить программу для решения нелинейного уравнения...

Найти решение нелинейного уравнения
Найдите такое число x, что x^2 + \sqrt{x} = C Вводится единственное число С; Вывод - число х с не менее 6 знаками после запятой

Решение нелинейного уравнения методом итераций в с++
Помогите пожалуйста решить нелинейное уравнение x^2-2x-1 = 0 промежуток от 0 до 3. Находил несколько кусков кода но так и не понял как...

Решение нелинейного уравнения методом перебора
Решить уравнение sin(1/x)=0 методом перебора на промежутке x = .


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru