2 項進行中

115-1 選課時程

進行中

  • 初選第一階段 6/15 – 6/18
  • 初選第二階段 6/22 – 6/25
  • 校際選修 進行中 8/24 – 9/18
  • 初選第三階段 8/31 – 9/3
  • 開學後加退選 進行中 9/7 – 9/21
  • 逾期加退選 9/21 – 9/24
選課資源

加入行事曆

選擇訂閱 Google Calendar,或下載通用的 ICS 檔案。

使用 Google Calendar 時,Google 會收到這份課表的公開連結。

數值軟體開發

Numerical Software Development

學期
114-2
學分
3 學分
當期課號
535702
永久課號
CSDS30003
開課單位
電機資訊國際碩士學位學程、電機資訊國際博士學位學程、數據科學與工程研究所碩士班、多媒體工程研究所、資訊科學與工程研究所、網路與資訊系統博士學位學程、資訊安全研究所、國際資訊碩士班、資訊學院博士班、網路工程研究所
授課教師
陳永昱
校區
光復
類別
選修
上課時間表
週一
Z
07:00–07:50
數值軟體開發
EC114(光復)
3 節連堂
1
08:00–08:50
2
09:00–09:50

* 根據陽明交大上課時間表所列

概述

The course introduces the art of building numerical software, i.e., computer programs applying numerical methods for solving mathematical, scientific, or engineering problems. We will be using Python, C++, and other tools (bash, git, make, etc.) to show the development process. You will learn: * practical software development by starting an open-source project * real-world applications of C++ * software engineering for scientific and high-performance computing * essentials of professional software development

先修科目

Critical discussion is required for the practical course and the project development. Students are required to attend all meetings. If you don't feel comfortable expressing yourself publicly, this course is not designed for you. Read the full syllabus at https://yyc.solvcon.net/en/latest/nsd/schedule/26au_nycu/schedule26au.html before taking the course. Students should have taken computer architecture and engineering mathematics or equivalents. Working knowledge of Linux and Unix-like is required. Prior knowledge to numerical methods is good to have. The instructor uses English in the lectures and discussions. Students are required to use English for the homework assignments and term project, including the presentation, and pro-actively speak English. The lecture meetings are not only for lecturing but also for discussing. Students are required to attend every meeting to discuss ideas and progress of the project. Discussion requires hard-learning skills, and students are **strongly recommended** to also take the course Academic English Writing (permanent course code GELT00014: https://timetable.nycu.edu.tw/?r=main/crsoutline&Acy=114&Sem=2&CrsNo=562044) if they have not.

備註

無備註

教學方式

The instructor will use English. Students are required to use English for the homework assignments and term project, including the presentation, and pro-actively speak English. Students should attend all meetings. Computer program for homework and project should be developed against the latest Ubuntu LTS system.

評分方式

* You are expected to learn programming languages yourself. Students are encouraged to form study groups for practicing C++, and discuss with the instructor and/or the teaching assistant. * Grading: homework 30%, mid-term exam: 30%, term project: 40%. * There are 12 lectures for the subjects of numerical software developing using Python and C++. * There will be 6 homework assignments for you to exercise. Programming in Python and/or C++ is required. * Mid-term examination will be conducted to assess students' understandings to the analytical materials. * Term project will be used to assess students' overall coding skills. Presentation is required. Failure to present results in 0 point for this part.

課程大綱
  • Introduction

    What is numerical software.

    講授:
    3
  • Fundamental engineering

    A large chunk of efforts is spent in the infrastructure for coding. The key to the engineering system is automation.

    講授:
    3
  • Python and numpy

    Python is a popular choice for the scripting engine that makes the numerical software work as a platform.

    講授:
    3
  • C++ and computer architecture

    The low-level code of numerical software must be high-performance. The industries chose C++ because it can take advantage of everything that a hardware architecture offers while using any level of abstraction.

    講授:
    3
  • Matrix operations

    Matrices are everywhere in numerical analysis. Arrays are the fundamental data structure and used for matrix-vector, matrix-matrix, and other linear algebraic operations.

    講授:
    3
  • Cache optimization

    How cache works, its importance to performance, and optimization with cache.

    講授:
    3
  • SIMD (vector processing)

    Parallelism and x86 assembly for SIMD.

    講授:
    3
  • Memory management

    Numerical software tends to use as much memory as a workstation has. The memory has two major uses: (i) to hold the required huge amount of data, and (ii) to gain speed.

    講授:
    3
  • Ownership and smart pointers

    Ownership and memory management using C++ smart pointers.

    講授:
    3
  • Modern C++

    Copy elision and move semantics. Variadic template and perfect forwarding. Closure.

    講授:
    3
  • C++ and C for Python

    Use C++ and C to control the CPython interpreter.

    講授:
    3
  • Array code in C++

    Dissect the array-based code and element-based code and when to use them.

    講授:
    3
  • Advanced Python

    Advanced topics in Python programming.

    講授:
    3
週次計畫
週次主題
第 1 週

Introduction (proposal open)

2026-02-23(一)
第 2 週

Unit 1: Fundamental Engineering

2026-03-02(一)
第 3 週

Unit 2: Python and Numpy

2026-03-09(一)
第 4 週

Unit 3: C++ and Computer Architecture

2026-03-16(一)
第 5 週

Unit 4: Matrix Operations

2026-03-23(一)
第 6 週

Unit 5: Cache Optimization

2026-03-30(一)
第 7 週

No meeting

2026-04-06(一)
第 8 週

Mid-term examination

2026-04-13(一)
第 9 週

Unit 6: SIMD (Vector Processing)

2026-04-20(一)
第 10 週

Unit 7: Memory Management

2026-04-27(一)
第 11 週

Unit 8: Ownership and Smart Pointers

2026-05-04(一)
第 12 週

Unit 9: Modern C++

2026-05-11(一)
第 13 週

Unit 10: C++ and C for Python

2026-05-18(一)
第 14 週

Unit 11: Array Code in C++

2026-05-25(一)
第 15 週

Unit 12: Advanced Python

2026-06-01(一)
第 16 週

Project presentation

2026-06-08(一)
第 17 週

No meeting

2026-06-15(一)
第 18 週

No meeting

2026-06-22(一)
教科書

Course notes: https://yyc.solvcon.net/en/latest/nsd/ Textbook: None References: * Computer Systems: A Programmer's Perspective: https://csapp.cs.cmu.edu/ * Python documentation: https://docs.python.org/3/ * Cppreference: https://en.cppreference.com/ * Effective Modern C++, Scott Meyer, O'Reilly, 2014 * modmesh (example system of this course) source code: https://github.com/solvcon/modmesh * pybind11 source code: https://github.com/pybind/pybind11 * cpython source code: https://github.com/python/cpython * numpy source code: https://github.com/numpy/numpy

Office Hours
地點
教師未提供此項資料
時間
Use the sciwork meetup at NYCU (see https://sciwork.dev/meetup/ )
聯絡方式
Send email to yyc at sciwork.dev, with "[nsd-course]" prefix in the subject line. Or go to sciwork meetup: https://sciwork.dev/meetup/ .