16 / 16 / 0
Регистрация: 21.08.2012
Сообщений: 16
1

Функция/метод возвращающая полином

05.09.2012, 09:13. Показов 1513. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Возможно ли написание функции которая брала бы массив размерностью 2хn (где первый рядок массива - Хі=0,1,..,n ; Второй рядок нное количество известных чисел у-ков).Далее функция должна "строить" полином Лагранжа (Приблизительно такая формула сильно упрощена ) L(x) = https://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{i=0}^{n}(x-xi)*(Уі)/(xi - xj) где х не задан.То есть он фактически неизвестная.На выходе нужно получить полином типа (условно) : a*x^2 + b*x + c = 0.
Высшая степень соответственно зависит от значения n.
Это уравнение нужно посчитать еще одним методом(это уже не сложно )
Это возможно ? Буду признателен за любую теоретическую информацию или идеи с алгоритмом.Не было бы степеней еще бы как то придумал как сделать , а тут вообще не знаю.Идеи есть но какие то поверхностные.

Добавлено через 6 часов 31 минуту
http://www.exponenta.ru/educat... me_ex8.asp
Нужно чтобы функция точно так же как в 1 примере считала хД
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2012, 09:13
Ответы с готовыми решениями:

Функция возвращающая true or false
Всем привет! Помогите новичку пожалуйста! Нужно правильно написать метод который будет возвращать 0...

Функция, возвращающая IEnumerable всех узлов дерева
Добрый день. Есть класс. Нужно написать функцию, возвращающую IEnumerable всех его узлов (сам...

Функция, возвращающая квадратный корень произведения первого аргумента на второй
Розработать doubl которая возвращает квадратный корень произведения первого на второй.(произведение...

Пользовательская функция, возвращающая сумму чисел, если переданные функции от А до В
Помогите пожалуйста, Составьте пользовательскую функцию, возвращающую сумму чисел, если...

8
192 / 147 / 27
Регистрация: 02.05.2011
Сообщений: 467
05.09.2012, 09:58 2
Возможно. Создайте два класса - первый массив размерностью 2xn, второй полином. И работайте с ними, наделите их полной функциональностью.
Класс масcивов можно построить на следующей логике:
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
 internal class nArray<T>
    {
        private List<T> arrayRows;//вектор - размерность массива
        private int arraySize = 0;//размерность массива
 
        public T GetRow(int n)//получаем требуемый вектор значений
        {
            if (n > arrayRows.Count)
                throw new ArgumentOutOfRangeException();
 
            return arrayRows[n];
        }
 
        public void SetRow(T obj)//присваивает новые значения
        {
            if (arrayRows.Count == arraySize)
                throw new ArgumentException();
 
            arrayRows.Add(obj);
        }
 
        public int ArraySize //возвращает размерность массива
        {
            get { return arraySize; }
        }
    }
Полином же очень просто. В обобщённой форме:
An*X^n+An-1*X^(n-1) + ... + A0;
Создайте List размерность которого равна числу коэффицентов полинома, и по порядку задайте все значения коэффицентов, и вот это и будет выходом функции.

А лучше создавайте два класса, пишите требуемые методы и все будет красиво!
1
16 / 16 / 0
Регистрация: 21.08.2012
Сообщений: 16
05.09.2012, 13:40  [ТС] 3
Спасибо.Упростил задачу уже(математически).Еще один вопрос .Есть ли алгоритм поиска коэффициентов при х^n из такого вот равенства : (x- X[n])(x-X[n-1])...(x-X[i +1])(x-X[i-1])....(x-1)x = 0 ;
К примеру n=10 , i =2 :
(x-10)(x-9)(x-8)(x-7)(x-6)(x-5)(x-4)(x-3)(x-1)x = 0;
Возможно ли как то упростить это уравнение ( без подстановки х разумеется ) чтобы оно приобрело вид
A(1)*x^n + A(2)*x^(n-1) + ...+ A(n+1) = 0 ;
В этом сложность как бы
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
05.09.2012, 18:19 4
Цитата Сообщение от Chromos Посмотреть сообщение
Возможно ли как то упростить это уравнение
Очевидно, только перемножить
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.09.2012, 18:45 5
Chromos, очевидно, что какой-то такой способ в природе существует:
http://www.nigma.ru/?s=%28x-10... srt=0&sf=1
А на самом деле ничего сложного.
1
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
05.09.2012, 18:48 6
Цитата Сообщение от Psilon Посмотреть сообщение
что какой-то такой способ в природе существует
Да, называется умножение многочленов.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.09.2012, 20:04 7
Chromos, вот, я вам написал, класс полинома ,работает нормально (в конструкторе через запятую указываете, по степеням, например new Polynome(1,2,3) означает x^2 + 2x + 3, а new Polynome(1,2,3,4) означает x^3+2x^2+3x+4
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
using System;
 
namespace ConsoleApplication13
{
    internal class Polynome
    {
        private readonly int[] _a;
 
        public Polynome(string length)
        {
            _a = new int[Convert.ToInt32(length)];
        }
 
        public Polynome(params int[] koef)
        {
            int length = koef.Length;
            _a = new int[length];
            for (int i = 0; i < length; i++)
                _a[i] = koef[length - i - 1];
        }
 
        private void Check(int i)
        {
            if (i >= _a.Length)
                throw new IndexOutOfRangeException("Недопустимый индекс " + i);
        }
 
        public int Length
        {
            get { return _a.Length; }
        }
 
        public int this[int i]
        {
            get
            {
                Check(i);
                return _a[i];
            }
            set
            {
                Check(i);
                _a[i] = value;
            }
        }
 
        public override string ToString()
        {
            int i = 0;
            var result = "";
            foreach (var x in _a)
            {
                if (x != 0)
                    result = " + " + ((x == 1 ? "" : x.ToString()) + (i > 1 ? "x^" + i : i == 1 ? "x" : "")) + result;
                i++;
            }
            return result.Substring(3, result.Length - 3);
        }
 
        public static Polynome operator +(Polynome lhs, Polynome rhs)
        {
            var polynome = new Polynome(Math.Max(lhs.Length, rhs.Length).ToString());
            for (int i = 0; i < lhs.Length; i++)
                polynome[i] = lhs[i];
            for (int i = 0; i < rhs.Length; i++)
                polynome[i] += rhs[i];
            return polynome;
        }
 
 
 
        public static Polynome operator *(Polynome lhs, Polynome rhs)
        {
            var polynome = new Polynome((lhs.Length*rhs.Length).ToString());
            for (int i = 0; i < lhs.Length; i++)
                for (int j = 0; j < rhs.Length; j++)
                    polynome[i + j] += lhs[i]*rhs[j];
            return polynome;
        }
 
    }
 
    internal class Program
    {
        private static void Main()
        {
            var a = new Polynome(1, 2, 3);
            var b = new Polynome(1, 2);
            Console.WriteLine("({0}) + ({1}) = {2}", a, b, a + b);
            Console.WriteLine("({0}) * ({1}) = {2}", a, b, a*b);
            Console.ReadKey();
        }
    }
}
1
16 / 16 / 0
Регистрация: 21.08.2012
Сообщений: 16
05.09.2012, 20:32  [ТС] 8
Psilon, Спасибо за ваши ответы.Они всегда содержат именно , то что нужно и (что самое главное) очень понятно Это как раз то что нужно.
1
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.09.2012, 21:34 9
Тока там очепятка есть, надо заменить
C#
1
2
3
4
5
6
7
8
public static Polynome operator *(Polynome lhs, Polynome rhs)
        {
            var polynome = new Polynome((lhs.Length*rhs.Length).ToString());
            for (int i = 0; i < lhs.Length; i++)
                for (int j = 0; j < rhs.Length; j++)
                    polynome[i + j] += lhs[i]*rhs[j];
            return polynome;
        }
на
C#
1
2
3
4
5
6
7
8
public static Polynome operator *(Polynome lhs, Polynome rhs)
        {
            var polynome = new Polynome((lhs.Length+rhs.Length - 1).ToString());
            for (int i = 0; i < lhs.Length; i++)
                for (int j = 0; j < rhs.Length; j++)
                    polynome[i + j] += lhs[i]*rhs[j];
            return polynome;
        }
Спасибо за ваши ответы.Они всегда содержат именно , то что нужно и (что самое главное) очень понятно Это как раз то что нужно.
И вам спасибо за лестный отзыв, за такое и работаем (ну еще заодно практика)

Да и Check, на самом деле, можно убрать, в массив встроена аналогичная проверка, тем более, что он не проверяет индексы на отрицание. В итоге получим простой индексатор:
C#
1
2
3
4
5
        public int this[int i]
        {
            get { return _a[i]; }
            set { _a[i] = value; }
        }
1
05.09.2012, 21:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.09.2012, 21:34
Помогаю со студенческими работами здесь

Функция Без if-else или тернарных операторов, возвращающая значение логического выражения
Всем Привет! сделал класс и программу все хорошо работает преподаватель просит сделать...

Есть какая-то функция считающая кол-во символов в string, и возвращающая на выходе значение int?
Или самому писать? Если да, то как проще?

Функция целого типа, возвращающая номер позиции с которой в строке s содержится последнее вхождение подстроки s1
Описать функцию PosLast(s1, s) целого типа, возвращающую номер позиции, начиная с которой в строке...

Функция принимающая два аргумента - массив строк и возвращающая массив целых чисел
Добрый день! Нужно реализовать функцию принимающую два аргумента - массивы строк и возвращающая...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru