Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2012, 19:00   #1
kefirkamm
 
Регистрация: 22.12.2011
Сообщений: 5
Восклицание аппроксимация для квадратичной функции, с#

-x^2+bx+c=0

формулы для a, b, c надо исправить. а то он неправильно решает, а для линейной вроде работает. кто-нибудь их знает? или может вывести??
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class LinProg
{
int size;
int[] x;
int[] y;
int a, b, c;
public LinProg(int size)
{
this.size = size;
x = new int[size];
y = new int[size];
a = 0;
b = 0;
c = 0;

}
public void InputXY()
{
int i;
Console.WriteLine(" Input {0} (x,y)", size);
for (i = 0; i < size; i++)
{
x[i] = Convert.ToInt32(Console.ReadLine());
y[i] = Convert.ToInt32(Console.ReadLine());
}
}
public void Raschet()
{
int OPR, sumx, sumy, sumxy, sumx2, sumx3, sumx4, sumx2y;
int i;
sumx = 0;
sumy = 0;
sumxy = 0;
sumx2 = 0;
sumx3 = 0;
sumx4 = 0;
sumx2y = 0;
for (i = 0; i < size; i++)
{
sumx += x[i];
sumy += y[i];
sumxy += x[i] * y[i];
sumx2 += x[i] * x[i];
sumx3 += x[i] * x[i] * x[i];
sumx4 += x[i] * x[i] * x[i] * x[i];
sumx2y += x[i] * x[i] * y[i];
}
OPR = size * sumx2 * sumx4 + sumx * sumx3 * sumx2 + sumx2 * sumx * sumx3 - sumx2 * sumx2 * sumx2 - size * sumx3 * sumx3 - sumx * sumx * sumx4;
a = (size * sumx2 * sumx2y + sumx * sumxy * sumx2 + sumy * sumx * sumx3 - sumy * sumx2 * sumx2 -
size * sumxy * sumx3 - sumx * sumx * sumx2y) / OPR;
c = (sumy * sumx2 * sumx4 + sumx * sumx2y * sumx3 + sumx2 * sumxy * sumx3 - sumx2 * sumx2 * sumx2y - sumy * sumx3 * sumx3 - sumx * sumxy * sumx4) / OPR;
b = (size * sumxy * sumx4 + sumy * sumx3 * sumx2 + sumx2 * sumx * sumx2y - sumx2 * sumx2 * sumxy -
size * sumx3 * sumx2y - sumy * sumx * sumx4) /OPR;

}
public int GetA()
{
return a;
}
public int GetB()
{
return b;
}
public int GetC()
{
return c;
}
public int Getx(int i)
{
return x[i];
}
public int Gety(int i)
{
return y[i];
}
public int GetY(int x)
{
return a * x * x + b * x + c;
}
}
class Program
{
static void Main(string[] args)
{
int i;
LinProg lp = new LinProg(5);
lp.InputXY();
lp.Raschet();
int a = lp.GetA();
int b = lp.GetB();
int c = lp.GetC();
Console.WriteLine("a = {0} ", a);
Console.WriteLine("b = {0} ", b);
Console.WriteLine("c = {0} ", c);
for (i = 0; i < 5; i++)
{
Console.WriteLine("x = {0} y = {1} yr = {2}", lp.Getx(i), lp.Gety(i), lp.GetY(lp.Getx(i)));
}
Console.Write("Press any key:");
Console.ReadKey();
}
}
}
kefirkamm вне форума Ответить с цитированием
Старый 23.01.2012, 13:19   #2
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

Ты неправильно считаешь коэфициенты, у тебя они заданы жесткими формулами, а должны считаться в цикле в завесимости от степени полинома и числа уравнений. к тому же коэфициеты скорее всего получатся не целые - надо тип Double использовать.
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Старый 23.01.2012, 13:26   #3
arrowsf1
Пользователь
 
Аватар для arrowsf1
 
Регистрация: 22.01.2012
Сообщений: 97
По умолчанию

квадротичной функцией апроксемируют, а вот как её апроксемировать не зна. Там в задание есть. линиями что ли.?????????????? 3-курс что ли
Модераторам: не баньте, у мя такие полезные советы, они стоющие
arrowsf1 вне форума Ответить с цитированием
Старый 23.01.2012, 13:39   #4
kefirkamm
 
Регистрация: 22.12.2011
Сообщений: 5
По умолчанию

а какие формулы тогда лучше использовать для подсчета коэффициентов ??
смогли бы написать??
kefirkamm вне форума Ответить с цитированием
Старый 23.01.2012, 13:54   #5
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

Порядк решения такой:
- Задаешь количество уравнений и максимальную степень апроксимирующего полинома.
- Вводишь значения Х У
- Считаешь матрицу коэфициентов для a,b,c и тд.
- Составляешь матрицу грамма из матрицы коэфициентов из предыдущего пункта
- Решаешь матрицу грамма (Я бы находил решение методом гаусса, т.к. там заранее известно что матрица не вырожденая). Получившийся вектор и будет набором искомых коэффициентов a,b,c...
-
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA: Одномерный поиск оптимума функции методом поиска с использованием квадратичной аппроксимации Potemkin Помощь студентам 1 29.09.2010 22:28
график квадратичной функции Student_2008 Помощь студентам 0 01.05.2010 14:22
Аппроксимация функции методом наименьших квадратов(МНК) vitaly38 Помощь студентам 1 29.03.2010 21:50
Паскаль. Аппроксимация функции методом наименьших квадратов. 3abeel Фриланс 17 13.07.2009 09:21
Значение квадратичной функции MAKEDON Общие вопросы C/C++ 3 07.03.2009 13:33