VIP STUDY сегодня – это учебный центр, репетиторы которого проводят консультации по написанию самостоятельных работ, таких как:
  • Дипломы
  • Курсовые
  • Рефераты
  • Отчеты по практике
  • Диссертации
Узнать цену

Создание приложения на Андроид для быстрого вычисления ошибки измерения физических величин

Внимание: Акция! Курсовая работа, Реферат или Отчет по практике за 10 рублей!
Только в текущем месяце у Вас есть шанс получить курсовую работу, реферат или отчет по практике за 10 рублей по вашим требованиям и методичке!
Все, что необходимо - это закрепить заявку (внести аванс) за консультацию по написанию предстоящей дипломной работе, ВКР или магистерской диссертации.
Нет ничего страшного, если дипломная работа, магистерская диссертация или диплом ВКР будет защищаться не в этом году.
Вы можете оформить заявку в рамках акции уже сегодня и как только получите задание на дипломную работу, сообщить нам об этом. Оплаченная сумма будет заморожена на необходимый вам период.
В бланке заказа в поле "Дополнительная информация" следует указать "Курсовая, реферат или отчет за 10 рублей"
Не упустите шанс сэкономить несколько тысяч рублей!
Подробности у специалистов нашей компании.
Код работы: W007948
Тема: Создание приложения на Андроид для быстрого вычисления ошибки измерения физических величин
Содержание
Трегубов Евгений Вячеславович

Tregubov Evgeny Vyacheslavovich

Студент

Student

Южный Федеральный Университет

Southern Federal University





Ерина Татьяна Сергеевна

Erina Tatyana Sergeevna

Студент

Student

Донской Государственный Технический университет

Don State Technical University 





Создание приложения на Андроид для быстрого вычисления ошибки измерения физических величин 


















1.Введение:

Актуальность: 

Производить вычисление погрешностей на смартфоне удобнее, быстрее и проще,чем на калькуляторе

Алгоритмы сортировки сами, без вмешательства пользователя, находят и исключают ошибочные измерения

Приложение считает сразу несколько погрешностей, единожды принимая на вход результаты измерений

Всегда в кармане



Цель: создание приложения на Андроид, которое будет рассчитывать 4 основные погрешности (среднеарифметическую, среднеквадратичную, абсолютную, относительную) сделанных измерений , учитывая возможные промахи, для студентов физического факультета и всех естественных направлений.

Задача: Изучение теории ошибок и погрешностей, языка программирования Java и работы с Android Studio для создания данного приложения.

Проведенная работа: Проведен анализ литературы, после чего составлен код программы для расчета погрешностей с учетом  промахов, создано приложение в Android Studio и проверена его работа на телефоне.



2. Научная статья:

2.1  Теория ошибок и погрешности измерений

Теория ошибок – раздел математической статистики, посвященной построению уточненных выводов о численных значениях приближенно-измеренных величин, а так же об ошибках (погрешностях) измерений. Погрешность измерения — оценка отклонения измеренного значения величины от её истинного значения. Погрешность измерения является характеристикой (мерой) точности измерения. Различают 3 основных вида ошибок: систематические, грубые и случайные. Систематическая погрешность (или, на физическом жаргоне, систематика) характеризует неточность измерительного инструмента или метода обработки данных. Грубая погрешность измерения (промах)  - это явно ошибочные результаты измерений, сильно отличающиеся от ожидаемых, и целиком вытекающие из неправильного отсчета, производимого человеком при измерении [1].  Случайный характер выпадения того или иного определенного результата измерений означает, что причины его появления настолько разнообразны, что невозможно заранее предсказать реализацию этого события. Можно говорить только о его вероятности появления при ограниченном  или бесконечно большом числе измерений [2]. Т.О. занимается изучением только грубых и случайных ошибок. 

2.1.1 Среднеарифметическая погрешность

Т.к. из-за наличия случайных погрешностей результаты измерений по своей природе представляют собой тоже случайные величины, истинного значения xист измеряемой величины указать нельзя. Но можно установить некоторый интервал значений измеряемой величины вблизи полученного в результате измерений значения xизм, в котором с определенной вероятностью содержится xист. Тогда результат измерений можно представить в следующем виде: 



где xi результат i -го измерения.

2.1.2 Среднеквадратичная погрешность

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



где n ? число наблюдений.

Если число наблюдений очень велико, то подверженная случайным колебаниям величина Sn стремится к постоянному значению ? :

.

В действительности, по результатам измерений всегда вычисляется не ? , а ее приближенное значение Sn, которое, вообще говоря, тем ближе к ? , чем больше n.

2.1.3 Абсолютная погрешность

Суммарная погрешность определяется как корень квадратный из суммы квадратов случайной и систематической погрешностей. Систематическая погрешность, как правило, указана в паспорте или на шкале прибора, а в простейших случаях может быть принята равной половине цены деления младшего разряда шкалы.



Определенная величина ?x является абсолютной погрешностью.



2.1.4 Относительная погрешность

Очевидно, что при одном и том же значении ?x результат может оказаться достаточно точным при измерении некоторой большой величины, тогда как при измерении малой величины его точность будет недостаточной. Таким образом, становится понятной необходимость введения относительной погрешности, которая определяется как: 

и выражается, обычно, в процентах.



2.2 Язык программирования Java

Давным-давно программисты писали программу непосредственно в двоичном коде. С появлением первого языка программирования — Assembler — работа программистов сильно упростилась. Стали появляться все новые и новые языки программирования. В 1972 году Деннис Ритчи из AT&T Bell Laboratories разработал процедурный язык С, который сразу стал очень популярным, так как был предназначен для создания сложных программ. В 1979-1980 гг. Бьерном Страуструпом, работающим в той же компании, был создан язык С with Classes.

У этого языка обнаружились некоторые недостатки, поэтому в 1983 году тот же Страуструп разработал язык С++, ставший популярным в 90-е гг. XX века. В 1991 году в компании Sun Microsystems под руководством Джеймса Гослинга, Патрика Ноутона, Криса Варта, Эдда Френка и Майкла Шеридана началась разработка языка Oak (дуб). В конце 1992 года появился первый вариант этого языка. С весны 1995 года данный язык стал называться Java.

Ява — остров Индонезийского архипелага, а также сорт кофе, который, согласно легенде, пили создатели Java.

2.2.1 Типы программирования

Предположим, у нас есть программа, которая работает со списком пользователей данного персонального компьютера. Каждый новый пользователь становится конкретным «объектом» класса «пользователи». При создании нового объекта ему приписываются «свойства», которые должны быть у каждого экземпляра, или объекта, класса (это могут быть фамилия, имя, отчество, дата рождения и т.п.). С объектом можно что-то сделать (вставить в список, удалить из списка, изменить адрес или фамилию пользователя и т.п.) — это есть «методы» (блоки кода, которые принадлежат классу, но вызываются данным конкретным объектом и позволяют выполнять как минимум одну операцию с данным объектом).

Когда мы пользуемся упомянутой программой, мы можем щелкнуть на соответствующих кнопках (каждая из которых обозначает какую-то важную для нас операцию, например: «добавить», «удалить», «изменить» и т.п.). Как только мы щелкнем на какой-то конкретной кнопке, возникает событие. Сразу же вступает в действие обработчик события, т.е. начинает работать код, являющийся реакцией на событие. Обработчик события, скажем щелчка на кнопке «Добавить», может по нашему желанию создать новый объект класса пользователи и применить какой-либо метод данного класса для этого конкретного объекта для изменения его свойств (например, свойству фамилия мы по желанию пользователя присваиваем значение Иванов). В классе есть четкое описание всех возможных методов, которые можно применить к любому экземпляру данного класса. Поэтому обращение к классу экономит время и силы программиста, работающего с конкретными объектами.

Язык С++ — предшественник Java — нельзя было назвать исключительно «объектно-ориентированным языком». В программе на языке С++ могли не использоваться классы — структурные единицы ООП (объектно-ориентированного программирования), а главная процедура main не принадлежала ни к какому классу.
Напротив, Java — строго объектно-ориентированный язык, он четко выдерживает все требования парадигмы ООП.
Рассмотрим еще три важных понятия ООП: наследование, инкапсуляция, полиморфизм. Наследование — это способность классов быть производными от других классов, наследуя при этом какие-то их методы и свойства. Вернемся к нашему старому примеру.

Класс пользователи может быть дочерним классом родительского класса люди и. естественно, наследовать какие-либо его свойства (допустим, пол, год рождения и т.п.) и методы (например, метод-запрос пользователя/человека о его паспортных данных).

Инкапсуляция позволяет ограничить приписывание каких-либо свойств класса другим объектам, которые не являются объектами этого класса. Полиморфизм позволяет объектам принимать несколько различных форм (в нашем примере один объект, созданный как объект типа пользователи, может быть как экземпляром класса пользователи, так и экземпляром класса люди).

Для написания и запуска кода используется среда разработки (IDE), например, Eclipse, IntelliJ IDEA или Android Studio. Написание программы происходит следующим образом: создаем класс -> Класс состоит из двух типов данных: поля — это данные, которые позволяют описывать свойства класса, и методы — о них говорилось выше. Далее следует объявление класса (т.е. описание его содержимого) происходит между двумя фигурными скобками после имени класса, также, как и объявление метода.
Содержимое между фигурными скобками называется телом метода (содержимое класса, соответственно, называется телом класса). Метод может передавать данные другому методу или переменной — это называется возвращением значения. Переменная — это именованная ячейка памяти, в которую можно записывать данные определенного типа. Любая строка, являющаяся логической единицей (если в ней задается выполнение какого-либо действия), должна завершаться символом В последней строке программы из листинга 1.1: }} -> мы закрываем тела метода и класса.

В Java неважно, как вы будете размещать строки, лишь бы точки с запятой правильно разделяли код на операторы (<оператор — вызов метода, создание переменной, присваивание ей значения и другие логические действия). 

2.2.2 Переменные и идентификаторы

Комментарии служат для разъяснения кода. Они являются своеобразными подсказками другим программистам или нам самим (например, если  программа будет слишком большой, мы можете забыть, что значит этот код или для чего конкретно создавалась данная переменная, — тогда комментарии помогут вспомнить смысл данного блока кода).

Комментарии бывают трех типов.
• Многострочный комментарий.
/*Многострочный
Комментарий */

Этот комментарий использовался еще в языке С. Он может располагаться на одной или нескольких строках между группами симоволов / * и * /.

• Однострочный комментарий.
// Комментарий
Этот однострочный комментарий пришел к нам из языка С++. Комментарий может располагаться только на одной строке начиная с пары символов / / и до конца строки.

• Многострочный тип комментариев для документирования кода:
/** код
Комментарий */
Подобные комментарии располагаются между /** и */ на одной или нескольких строках. С помощью специальной утилиты javadoc на их основе собираются специальные файлы, которые в результате оказываются представлены в виде HTML-страницы.



Переменная — это именованная ячейка памяти, хранящая данные определенного типа. Эти данные должны находиться в диапазоне допустимых значений, который уникален для каждого типа данных.Имена переменных, классов, объектов, интерфейсов, методов называются идентификаторами. Названия идентификаторов выбираются по следующим правилам:
• они должны начинаться с буквы или символа подчеркивания;
• они могут содержать латинские буквы, символы подчеркивания или цифры без пробелов;
• названия идентификаторов не должны совпадать с ключевыми словами; список этих ключевых слов приведен в табл. 1 (см.Приложение I)

2.3 Выполнение работы в Android Studio

1.



    Physics Deviations

    Рассчитать

    Settings

    Введите все значения замеров через пробел

    Введите теоретическое значение(если необходимо)

    SpravkaActivity

    Среднеарифметическая погрешность

    Среднеквадратичная погрешность

    Абсолютная погрешность

    Относительная погрешность

      , где      x   -  среднее арифметическое

             U  -  теоретическое значение



package evgeny.tregubov.physicsdeviation;

        import android.content.Intent;

        import android.support.v7.app.ActionBarActivity;

        import android.os.Bundle;

        import android.text.TextUtils;

        import android.view.Menu;

        import android.view.MenuItem;

        import android.view.View;

        import android.widget.Button;

        import android.widget.EditText;

        import android.widget.ImageView;

        import android.widget.TextView;

        import java.util.ArrayList;

        import static java.lang.Math.pow;

        import static java.lang.Math.sqrt;

        import static java.lang.StrictMath.abs;

public class MainActivity extends ActionBarActivity implements View.OnClickListener {

    EditText massivText;

    EditText theoreticalText;

    Button rashBtn;

    TextView tvResult;

    ImageView imageView;

    ImageView imageView2;

    ImageView imageView3;

    ImageView imageView4

   @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        // находим элементы

        massivText = (EditText) findViewById(R.id.massivText);

        theoreticalText = (EditText) findViewById(R.id.theoreticalText);

        rashBtn = (Button) findViewById(R.id.rashBtn);

        tvResult = (TextView) findViewById(R.id.tvResult);

        // прописываем обработчик

        rashBtn.setOnClickListener(this);



    }



    @Override

    public void onClick(View v) {

        // TODO Auto-generated method stub

        // Проверяем поля на пустоту

        if (TextUtils.isEmpty(massivText.getText().toString())) {

            return;

        }



        // определяем нажатую кнопку и выполняем соответствующую операцию

        switch (v.getId()) {

            case R.id.rashBtn:

                //пишем свои действия, выполняемые при нажатии кнопки



*****************************************************************************

// заполним массив элеентами из строки massiv text

                String p;

                p = "-0123456789.";

                String g = "";

                String g1 = "";

                // получаем из EditText

                String s;

                //s = ".5 -2.2 6.25 5.6";

                s = massivText.getText().toString();

                String s1;

                s1 = s + "f ";

                int k = s1.length(); // длина стороки

                int n;   // кол-во чисел

                n = 0;

                int m; // БУЛИН определяет выполнялось ли присоединение g=g+.... в цикле  for 

                m = 0;

                ArrayList a = new ArrayList();  // объявляем массив

                

                //добавим пробел в конец строки для корректной работы программы

                //считаем кол-во чисел в строке

                for (int i = 0; i < k; i++) {

                    for (int r = 0; r <= 11; r++) {

                       //заменяем запятую точкой во всей строке

                        s1=s1.replace(',' , '.');

                        if (s1.charAt(i) == p.charAt(r)) {

                            g = g + String.valueOf(s1.charAt(i));

                            m = 1;

                        }

                    }

                    for (int r = 0; r <= 11; r++) {

                        if ((m == 0) && (s1.charAt(i) != p.charAt(r)) && (i > 0)) {

                            if (s1.charAt(i - 1) == p.charAt(r)) {

                                a.add(Double.valueOf(g));

                                n = n + 1;

                                g = "";

                            }

                        }

                    }

                    m = 0;

                }

// крутой сортировщик

                a.add(0.0); // добавляем еще один элемент массива для корректной работы программы

                double s2 = 0; //среднее арифметическое

                double k1 = 0;

                double esp = 0.3; // точноть(дробь)

 

                //среднее арифметическое

                for (int i = 0; i < n; i++)

                    s2 = s2 + a.get(i) / n;

                //ищем элементы которые отличаются от среднего значения больше чем на 30%

                //удаляем их, сдвигаем массив и меняем n

                for (int i = 0; i < n; i++)

                {

                    if (((abs(a.get(i) - s2)) / s2)>esp)

                    {

                        //		lish = lish + str(i) + " ";		//преобразуем i в строковую пременную для того чтобы запомнить какие элементы выбыли

                        for (int t = i; t < n; t++)

                            a.set(t, a.get(t + 1));

                        a.set(n, 0.0);

                        n = n - 1;

                    }

                }



//вычислители

                double s11 = 0; double k11 = 0;

                String pogr1;String pogr2;String pogr3;String pogr4;String pogr5; String pogr6;

            

                // среднеарифметическая погрешность (k11)

                for (int i = 0; i < n; i++)

                    s11 = s11 + a.get(i);

                s11 = s11 / n;

                for (int i = 0; i < n; i++)

                    k11 = k11 + abs(s11 - a.get(i));

        k11 = k11 / (n);

                int k112;

                k112=Integer.valueOf((int) (k11*100000));

                k11=k112/100000.0;

                pogr1="Среднеарифметическая погрешность равна:   " + k11;

              



	  //среднеквадратичная погрешность (k11)

                double p1 = 1.0; k11 = 0; double l;

                for (int i = 0; i < n; i++)

                    p1 = p1*a.get(i);

                l = pow(p1, (1/Double.valueOf(n)));   

                for (int i = 0; i < n; i++)

                    k11 = k11 + (l- a.get(i))*(l - a.get(i));

                k11 =(sqrt(k11 / (n-1)));

                k112=Integer.valueOf((int) (k11*100000));

                k11=k112/100000.0;

                pogr2="Среднеквадратичная погрешность равна:   " + k11;



                if (!(TextUtils.isEmpty(theoreticalText.getText().toString()))) {           //исправления

                    String u1;

                    u1 = theoreticalText.getText().toString();

                    u1=u1.replace(',' , '.');





                    u1=u1+"f";

                    double u;

                    g="";

                    k=u1.length();



                    for (int i = 0; i < k; i++) {

                        for (int r = 0; r <= 11; r++) {

                            if (u1.charAt(i) == p.charAt(r)) {

                                g = g + String.valueOf(u1.charAt(i));

                            }

                        }



                    }

                    u=Double.valueOf(g);





                    // средняя абсолютная погрешность (АРИФ) (s11)

                    s11 = 0;



                    for (int i = 0; i < n; i++)

                        s11 = s11 + abs(u- a.get(i))/n;



                    int s112;

                    s112=Integer.valueOf((int) (s11*100000));

                    s11=s112/100000.0;

                    pogr3="Абсолютная погрешность равна:   " + s11;

                



    // средняя относительная погрешность (АРИФ) (s11)

                    s11 = 0;

                    for (int i = 0; i < n; i++)

                        s11 = s11 + (abs(u - a.get(i)))/u / n*100;

                    s112=Integer.valueOf((int) (s11*100000));

                    s11=s112/100000.0;

                    pogr4="Относительная погрешность равна:   " + s11 + " %";

                }

                else {pogr5=" ";pogr6=" ";pogr3=" ";pogr4=" ";}

                tvResult.setText(pogr1+ "\n" +pogr2+ "\n" +pogr3+ "\n" +pogr4);



          

***************************************************************************

                break;



            default:

                break;

        }

    }

    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.

        getMenuInflater().inflate(R.menu.menu_main, menu);

        return true;

    }

    @Override

    public boolean onOptionsItemSelected(MenuItem item) {

        // Handle action bar item clicks here. The action bar will

        // automatically handle clicks on the Home/Up button, so long

        // as you specify a parent activity in AndroidManifest.xml.

        int id = item.getItemId();



        //noinspection SimplifiableIfStatement

        if (id == R.id.action_settings) {

            return true;

        }

        return super.onOptionsItemSelected(item);

    }


3. Заключение

В результате проведенной работы, мы добились первоначальной постановки задачи и создали приложение на Андроид, которое рассчитывает 4 погрешности для физических практикумов с учётом промахов: среднеарифметическую, среднеквадратичную, абсолютную и относительную. Для этого мы изучили и использовали язык программирования Java и научились работать со средой программирования Android Studio с помощью различных видеоуроков и необходимой литературы..

Мы запустили приложение и проверили его в действии, всё работает, как и было запланировано. На первоначальном этапе, оно будет распространено в рамках Физического Факультета университета. В конечном итоге, данное приложение могут использовать студенты не только физических факультетов, но и всех естественных факультетов различных университетов, т.к. подобные практикумы есть и у них, а так же оно может помочь многим школьникам, т.к., как правило, в некоторых школьных лабораторных работах тоже просят рассчитать какую-либо погрешность, но не акцентируется внимание на теории ошибок и ученики имеют скудное представление о том, что это. Плюс ко всему приложение имеет миги справочник, в котором все желающие смогут найти формулы, по которым рассчитывались погрешности.

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










4. Список используемой литературы

А.Н. Зайдель «Ошибки измерений физических величин»

М.Г. Козлов «Метрология и стандартизация 3.3 Случайные погрешности измерений»

Линник Ю. В., Метод наименьших квадратов и основы математико-статистической теорииобработки наблюдений, 2 изд., М., 1962; Большев Л. Н., Смирнов Н. В., Таблицы математической статистики,2 изд., М., 1968.

В.Я. Меклер «Основы автоматизации санитарно-технических устройств»

http:// startandroid.ru – Учебник по Андроид

http:// devcolibri.com – Java



5. Приложения









1.......................
Для получения полной версии работы нажмите на кнопку "Узнать цену"
Узнать цену Каталог работ

Похожие работы:

Отзывы

Спасибо, что так быстро и качественно помогли, как всегда протянул до последнего. Очень выручили. Дмитрий.

Далее
Узнать цену Вашем городе
Выбор города
Принимаем к оплате
Информация
Экспресс-оплата услуг

Если у Вас недостаточно времени для личного визита, то Вы можете оформить заказ через форму Бланк заявки, а оплатить наши услуги в салонах связи Евросеть, Связной и др., через любого кассира в любом городе РФ. Время зачисления платежа 5 минут! Также возможна онлайн оплата.

Рекламодателям и партнерам

Баннеры на нашем сайте – это реальный способ повысить объемы Ваших продаж.
Ежедневная аудитория наших общеобразовательных ресурсов составляет более 10000 человек. По вопросам размещения обращайтесь по контактному телефону в городе Москве 8 (495) 642-47-44